[Rcpp-devel] type mismatch between NumericMatrix and IntegerMatrix

JJ Allaire jj.allaire at gmail.com
Sun Aug 7 13:17:24 CEST 2016


In the latter case the integer matrix is "converted" to a numeric matrix
via a copy which is why your modification doesn't work.

That said, modifying an object in place violates R's language semantics and
could lead to incorrect computations (i.e. users expect that objects are
immutable and this is part of what ensures the integrity of computations)
so this is strongly discouraged.

On Sun, Aug 7, 2016 at 7:00 AM, Kaspar Märtens <kaspar.martens at gmail.com>
wrote:

> Hi,
>
> When experimenting with the following toy function,
>
> // [[Rcpp::export]]
> void modify_matrix(NumericMatrix A){
>   A(0, 0) = 5;
> }
>
> and applying this on matrices defined in R, I occasionally noticed
> unexpected behaviour (as it turns out, on integer matrices).
>
> ### Example 1 (works as expected)
>
> A = matrix(0, 2, 2)
> modify_matrix(A)
> A
>
> ##      [,1] [,2]
> ## [1,]    5    0
> ## [2,]    0    0
>
> ### Example 2 (does not modify the matrix)
>
> A = matrix(1:4, 2, 2)
> modify_matrix(A)
> A
>
> ##      [,1] [,2]
> ## [1,]    1    3
> ## [2,]    2    4
>
> I realised that in the latter case, A consists of integers, so I guess I
> should be using an IntegerMatrix version of my function instead. However,
> shouldn't Rcpp detect the type mismatch between NumericMatrix and
> IntegerMatrix?
>
> Best,
> Kaspar
>
>
> _______________________________________________
> Rcpp-devel mailing list
> Rcpp-devel at lists.r-forge.r-project.org
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20160807/44d0d180/attachment.html>


More information about the Rcpp-devel mailing list