【发布时间】:2019-05-13 18:39:36
【问题描述】:
我想对应用于不同数据集大小的几个函数(具有随机效应的回归和其他分析)使用的时间和配置文件内存进行基准测试。 我的计算机有 16GB 内存,我想看看 R 在处理大型数据集时的表现以及限制是什么。
为了做到这一点,我使用了一个循环和包bench。
每次迭代后,我都会使用 gc(reset=TRUE) 清理内存。
但是当数据集非常大时,垃圾收集器无法正常工作,它只会释放部分内存。
最后,所有的内存都被填满了,我需要重新启动我的 R 会话。
我的完整数据集称为 allDT,我执行以下操作:
for (NN in (1:10)*100000) {
gc(reset=TRUE)
myDT <- allDT[sample(.N,NN)]
assign(paste0("time",NN), mark(
model1 = glmer(Out~var1+var2+var3+(1|City/ID),data=myDT),
model2 = glmer(Out~var1+var2+var3+(1|ID),data=myDT),
iterations = 1, check=F))
}
这样我可以获得每种尺寸的结果。
该方法不公平,因为最后内存没有得到适当的清理。
我认为另一种方法是在每次迭代后重新启动整个 R 程序(退出 R 并重新启动它,这是我发现你可以清理内存的唯一方法),再次加载数据并继续从最后一步开始。
有没有简单的方法或替代方法? 也许我每次都需要将结果保存在磁盘上,但很难跟踪最后执行的行,特别是如果 R 挂起。 我可能需要创建一个外部批处理文件并在每次迭代时运行一个调用 R 的循环。虽然我更喜欢在没有任何外部脚本/批处理的情况下从 R 中完成所有工作。
【问题讨论】:
-
您好,这不是您问题的直接答案,但也许会对您有所帮助。您可以使用函数 memory.limit() 来获取您的电脑拥有的可用内存(RAM)。您还可以使用函数 memory.limit() 以这种方式从 HDD 设置部分内存:memory.limit(60000)。所以假设你有 16GB RAM,那么 R 将使用 16GB RAM + 44GB 硬盘空间来执行你的代码。当 R 崩溃时,我正在使用它,因为 pc 缺少 RAM。也许这会让你的 R 在代码处理时不会崩溃。
-
嗨。我已经在使用 memory.limit 函数了。无论如何,当数据集很大时,您没有足够的 SSD 磁盘。我想测量用于不同数据集大小的时间和内存。
-
哦,好吧,即使我使用超过 8-10GB 的数据文件,它也对我有用。另外,是的,我明白你想做什么,我只是强硬的 memory.limit() 会让你的 R 不会崩溃。比我更擅长 R 的人可能会帮助您解决问题。
标签: r profiling benchmarking