Rcpp矩阵二值化

时间:2017-07-16 11:58:06

标签: r matrix rcpp

我在Rcpp上做了一个二值化函数:

NumericMatrix binarize_matrix(NumericMatrix m){
int ncol=m.ncol();
for(int i=0; i<ncol; i++){ 
for(int j=0;j<ncol;j++){ 
  if(m(j,i)>1) 
    m(j,i)=1; 
}
}
return m;
}

该功能运作良好。 但是,在R中,当我通过M = m创建两个矩阵(M和m)时。当我将一个二进制化时,另一个也被二进制化。

为什么对象依赖?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

您正在制作对象的浅表副本。请尝试以下代码并查看控制台输出。

M = data.frame(a=c(1,2))
m = M
tracemem(m)
tracemem(M)

m2 <- data.frame(M)
tracemem(m2)

输出如下:

> M = data.frame(a=c(1,2))
> m = M
> tracemem(m)
[1] "<0x6b9d028>"
> tracemem(M)
[1] "<0x6b9d028>"
> 
> m2 <- data.frame(M)
> tracemem(m2)
[1] "<0x6b9aea8>"

m2对象在内存中的位置不同。希望这可以帮助!