我在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)时。当我将一个二进制化时,另一个也被二进制化。
为什么对象依赖?我该如何解决这个问题?
答案 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对象在内存中的位置不同。希望这可以帮助!