Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将big.matrix中的所有非零数更改为1_R_R Bigmemory - Fatal编程技术网

将big.matrix中的所有非零数更改为1

将big.matrix中的所有非零数更改为1,r,r-bigmemory,R,R Bigmemory,在使用类为big.matrix的对象时,如何将所有非零值更改为1?如果我转换为法线矩阵,对象大小超过2gb(10^7列,100行),因此这是不可行的 谢谢 您可以使用Rcpp来实现这一点(将此代码放在.cpp文件中,并使用Rcpp::sourceCpp对其进行源代码转换): /[[Rcpp::depends(BH,bigmemory)]] #包括 #包括 使用名称空间Rcpp; //[[Rcpp::导出]] 空到一(SEXP bm_addr){ XPtr XPtr(bm_addr); Matri

在使用类为
big.matrix
的对象时,如何将所有非零值更改为1?如果我转换为法线矩阵,对象大小超过2gb(10^7列,100行),因此这是不可行的


谢谢

您可以使用Rcpp来实现这一点(将此代码放在.cpp文件中,并使用
Rcpp::sourceCpp
对其进行源代码转换):

/[[Rcpp::depends(BH,bigmemory)]]
#包括
#包括
使用名称空间Rcpp;
//[[Rcpp::导出]]
空到一(SEXP bm_addr){
XPtr XPtr(bm_addr);
MatrixAccessor macc(*xptr);
对于(大小j=0;j// [[Rcpp::depends(BH, bigmemory)]]
#include <bigmemory/MatrixAccessor.hpp>
#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
void to_one(SEXP bm_addr) {

  XPtr<BigMatrix> xptr(bm_addr);
  MatrixAccessor<double> macc(*xptr);

  for (size_t j = 0; j < macc.ncol(); j++)
    for (size_t i = 0; i < macc.nrow(); i++)
      if (macc[j][i] != 0) macc[j][i] = 1;
}

/*** R
library(bigmemory)
r <- 100
c <- 10000
bm <- matrix(sample(0:4, r * c, replace = TRUE), r, c)
bm <- as.big.matrix(bm, type = "double")
bm[, 1]
to_one(bm@address)
bm[, 1]
*/