我有一个相当大的数据集(大约50K个条目),我用它来生成关联矩阵.这很好用,只使用了20 GB左右的内存.
然后,我只想从其中提取唯一的成对组合,并将其转换为数据框.这就是我遇到问题的地方.内存使用率过高或索引变量溢出(S).我知道有>;2B组合,所以我知道它的大小有点爆炸,但仍然..
我try 了不同的方法来实现这一点,但都没有成功.
模拟数据:
df = matrix(runif(1),nrow=50000, ncol=50000, dimnames=list(seq(1,50000,by=1), seq(1,50000,by=1)))
try 从相关矩阵中提取上/下三角形,然后对其进行reshape :
df[lower.tri(df, diag = T),] = NA
df = reshape2::melt(df, na.rm = T)
崩溃的原因:
Error in df[lower.tri(bla, diag = T), ] = NA :
long vectors not supported yet: ../../src/include/Rinlinedfuns.h:522
如果您只执行以下操作,它将崩溃,并返回相同的错误:df = df[lower.tri(df, diag = T),]
(我确实读了Large Matrices in R: long vectors not supported yet遍,但我觉得它对我的情况没有帮助)
我还试过:
df = subset(as.data.frame(as.table(df)),
match(Var1, names(annotation_table)) > match(Var2, names(annotation_table)))
仅使用基于R的包,但它最终在大约1天后耗尽内存.这是内存占用最大的部分:as.data.frame(as.table(df))
,所以我也try 用reshape2::melt(df)
替换它,但内存也用完了
我在一台内存为128 GB的Ubuntu机器上运行代码.我确实有更大的机器,但我预计这个内存量应该足够了.
任何帮助都将不胜感激.谢谢.