我知道R包bigmemory在处理大型矩阵和数据帧时效果很好。但是,我想知道是否有任何包或任何有效处理大型列表的方法。
具体来说,我创建了一个列表,其元素是向量。我有一个for循环,在每次迭代期间,多个值被附加到该列表中的选定元素(向量)。首先,它运行得很快,但是当迭代结束时可能超过10000时,它会逐渐减慢(一次迭代需要大约一秒钟)。我将经历大约70000到80000次迭代,之后列表会非常大。
所以我只是想知道big.mtrix包中是否有像big.mtrix这样的big.matrix可以加速整个过程。
谢谢!
答案 0 :(得分:2)
我不确定这是否是一个有用的答案,但您可以使用filehash
包以交互方式处理磁盘上的列表。
例如,这里有一些制作磁盘数据库的代码,将预分配的空列表分配给数据库,然后运行填充数据库中列表的函数(获取当前时间)。
# how many items in the list?
n <- 100000
# setup database on disk
dbCreate("testDB")
db <- dbInit("testDB")
# preallocate vector in database
db$time <- vector("list", length = n)
# run function using disk object
for(i in 1:n) db$time[[i]] <- Sys.time()
在这个过程中几乎没有任何RAM的使用,但由于磁盘I / O不变,它非常慢(比我在某些测试中的RAM慢两个数量级) 。因此,我不确定这种方法是否可以很好地解决如何加快处理大型对象的问题。
答案 1 :(得分:1)
DSL
包可能会有所帮助。 DList
对象的作用类似于替换R的列表。此外,它也提供了像设施一样的分布式列表。