[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