避免将dgCMatrix自动转换为dgeMatrix

时间:2014-12-11 13:19:09

标签: r sparse-matrix

我使用dgCMatrix包中的类Matrix来存储大约2.55亿个值的方阵,大小约为1.7 MB。

然而,在我执行variable <- variable/rowSums(variable)之后,其中variable是稀疏矩阵,结果变量变为类dgeMatrix,并且大小膨胀到接近2GB,有效占用了所有可用内存和在某些情况下崩溃了脚本。

有没有办法强制输出保留在班级dgCMatrix

我怀疑原因是非零元素的数量增加到矩阵不再被认为是稀疏的点,这是由于在行的总和为零的元素中引入了NaN。如果有解决NaN的问题,我也会对此持开放态度。但请注意,我无法避免产生零行,因为我的矩阵需要是一个正方形,并且相应的列总和通常不为零。

2 个答案:

答案 0 :(得分:1)

你可以尝试为除数做一个简单的ifelse函数:

variable <- variable/ifelse(rowSums(variable)!=0,rowSums(variable),1)

除非出于某种原因需要将其除以0,否则这似乎是避免使用NAN的最简单方法。

答案 1 :(得分:0)

我有同样的问题。这是我用来避免NaN并保留类dgCMatrix中的输出的解决方法:

tmp = 1/rowSums(variable)
tmp[is.infinite(tmp)] <- 0
variable <- variable * tmp