R 矩阵二值化

R 矩阵二值化,r,matrix,rcpp,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; } numerimatrix二值化_矩阵(numerimatrix m){ int ncol=m.ncol();

我在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;
}
numerimatrix二值化_矩阵(numerimatrix m){
int ncol=m.ncol();

对于(inti=0;i您正在创建对象的浅层副本。请尝试以下代码并查看控制台输出

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
轨迹(m)
轨迹(M)
m2 M=数据帧(a=c(1,2))
>m=m
>轨迹(m)
[1] ""
>轨迹(M)
[1] ""
> 
>m2轨迹(m2)
[1] ""

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

正确!Rcpp通过代理对象使用浅拷贝。使用
Rcpp::NumericMatrix m2=Rcpp::clone(m);
并分配给
m2
,如果你想
m
不变。为什么要麻烦Rcpp?m[]
> 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>"