Конечно, это работает тогда и только тогда, когда вы передаете матричные целые числа :
R> Rcpp::sourceCpp("/tmp/so51028610.cpp")
R> M <- matrix(1L, 2, 2) # integer type
R> M # all ones
[,1] [,2]
[1,] 1 1
[2,] 1 1
R> modify_matrix(M) # call to mod
R> M # and changed
[,1] [,2]
[1,] 5 1
[2,] 1 1
R>
, где ваш (минимально модифицированный) код плюс вызов R равны
#include <Rcpp.h>
// [[Rcpp::export]]
void modify_matrix(Rcpp::IntegerMatrix x) {
x(0,0) = 5;
}
/*** R
M <- matrix(1L, 2, 2) # integer type
M # all ones
modify_matrix(M) # call to mod
M # and changed
*/
C и C ++ являются статически типизированными языками.Вы должны беспокоиться об этом больше, чем в R.