【发布时间】:2011-05-28 10:56:12
【问题描述】:
我有一个包含 1,344 个唯一字符串的向量 x。我想生成一个矩阵,它为我提供所有可能的三个值组,无论顺序如何,并将其导出到 csv。
我在带有 64 位 Ubuntu 的 m1.large 实例上的 EC2 上运行 R。使用 combn(x, 3) 时出现内存不足错误:
Error: cannot allocate vector of size 9.0 Gb
结果矩阵的大小为 C1344,3 = 403,716,544 行和三列 - 这是 combn() 函数结果的转置。
我想使用 bigmemory 包创建一个支持 big.matrix 的文件,这样我就可以分配 combn() 函数的结果。我可以创建一个预先分配的大矩阵:
library(bigmemory)
x <- as.character(1:1344)
combos <- 403716544
test <- filebacked.big.matrix(nrow = combos, ncol = 3,
init = 0, backingfile = "test.matrix")
但是当我尝试分配值 test <- combn(x, 3) 时,我仍然得到相同的结果:Error: cannot allocate vector of size 9.0 Gb
我什至尝试强制 combn(x,3) 的结果,但我认为因为 combn() 函数返回错误,所以 big.matrix 函数也不起作用。
test <- as.big.matrix(matrix(combn(x, 3)), backingfile = "abc")
Error: cannot allocate vector of size 9.0 Gb
Error in as.big.matrix(matrix(combn(x, 3)), backingfile = "abc") :
error in evaluating the argument 'x' in selecting a method for function 'as.big.matrix'
有没有办法将这两个功能结合在一起以获得我需要的东西?有没有其他方法可以实现这一目标?谢谢。
【问题讨论】:
-
您是否考虑过使用combinadics 来生成每个组合?我想我有一些 R 代码可以做到这一点,但我必须挖掘它。
-
@Josh 我不确定我是否理解组合学与我想要实现的目标有何不同。我以 as.character(1:1344) 为例,但实际情况是我的值不是连续的。如果您认为您拥有的 R 代码可能会有所帮助,请发布。谢谢!
-
@Joshua @Joris @Dirk 感谢您的所有建议。由于时间限制,我选择了 Joris 的方法(尽管我不知道哪个更快)。我让系统在所有 400m 线路上运行一段时间。 @Joshua,我认为很多人会在您的组合函数中发现很多价值。
标签: r combinatorics bigdata