与 Rcpp 和 RI 合作观察到以下行为,目前我不明白。考虑以下用 Rcpp 编写的简单函数
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericMatrix hadamard_product(NumericMatrix & X, NumericMatrix & Y){
unsigned int ncol = X.ncol();
unsigned int nrow = X.nrow();
int counter = 0;
for (unsigned int j=0; j<ncol; j++) {
for (unsigned int i=0; i<nrow; i++) {
X[counter++] *= Y(i, j);
}
}
return X;
}
Run Code Online (Sandbox Code Playgroud)
这只是返回两个矩阵的按分量乘积。现在我知道这个函数的参数是通过引用传递的,即调用
M <- matrix(rnorm(4), ncol = 2)
N <- matrix(rnorm(4), ncol = 2)
M_copy <- M
hadamard_product(M, N)
Run Code Online (Sandbox Code Playgroud)
会覆盖原来的M。但是,它也会覆盖M_copy,我不明白。我认为M_copy <- M …