小编jfi*_*ler的帖子

Rcpp 和 R:按引用传递

与 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 …

r pass-by-reference pass-by-value rcpp

2
推荐指数
1
解决办法
746
查看次数

标签 统计

pass-by-reference ×1

pass-by-value ×1

r ×1

rcpp ×1