【发布时间】:2018-04-21 19:02:11
【问题描述】:
我有一个非常大的二进制矩阵,存储为 big.matrix 以节省内存(否则超过 2 GB - 500 万列和 100 行)。
r <- 100
c <- 10000
m4 <- matrix(sample(0:1,r*c, replace=TRUE),r,c)
m4 <- cbind(m4, 1)
m4 <- as.big.matrix(m4)
我需要删除只有一个唯一值的每一列(在这种情况下,只有 0 或只有 1)。由于列的数量,我希望能够并行执行此操作。
如何在将数据压缩为 big.matrix 的同时做到这一点?我可以将其转换为 df 并遍历列以查找唯一值的数量,但这会占用太多 RAM。
谢谢!
【问题讨论】:
-
这样的可以吗?
m5 <- m4[, !(colSums(m4) %in% c(0, nrow(m4)))] -
很遗憾没有。首先,它仅在 m4 属于
matrix类而不是问题中指定的big.matrix时才有效。此外,输出也是matrix类,占用太多内存。 -
啊,好的,抱歉。如何将子集包装在
as.big.matrix中,或者使用`sub.big.matrix 对大矩阵的子集应用子集操作?我猜你可能已经考虑过这些选项了? -
使用 Rcpp 创建一个算法,根据您的标准返回您想要保留的列索引。这应该很容易,因为您已经知道如何在 Rcpp 中访问
big.matrix的元素。然后,使用deepcopy。
标签: r r-bigmemory