我有一个包含大约 2000 万行的输入文件。文件大小约为 1.2 G。无论如何我可以在 R 中绘制数据。有些列有类别,其中大部分是数字。
我已经用大约 800K 行的输入文件的一小部分尝试了我的绘图脚本,但是即使我有大约 8G 的 RAM,我似乎也无法绘制所有数据。有什么简单的方法可以做到这一点。
如果没有更清楚地描述你想要的情节,很难给出具体的建议。但是,一般来说,没有必要在一个图中绘制 2000 万个点。例如,时间序列可以由样条拟合或某种平均值表示,例如将每小时数据汇总为每日平均值。或者,您可以绘制数据的一些子集,例如在时间序列示例中每天只绘制一个点。所以我认为你的挑战不是在一个情节上获得 2000 万分,甚至 800k,而是如何有效地聚合你的数据,以传达你想要传达的信息。
正如 Ben Bolker 在Speed up plot() function for large dataset中所建议的,用于绘制 hexbins 而不是散点图的包 hexbin 对我来说相当适用于 4GB RAM 的 200 万条记录。但是对于同一组变量的 2 亿条记录/行,它失败了。我尝试减小 bin 大小以调整计算时间与 RAM 使用情况,但没有帮助。
对于 2000 万条记录,您可以尝试使用 xbins = 20,30,40 开始的 hexbins。
直接绘制到光栅文件设备(png()
例如调用)要快得多。我尝试绘图rnorm(100000)
,在我的笔记本电脑 X11 cairo 绘图需要 2.723 秒,而png
设备在 2.001 秒内完成。以 100 万分计算,数字分别为 27.095 和 19.954 秒。
我使用 Fedora Linux,这里是代码。
f = function(n){
x = rnorm(n)
y = rnorm(n)
png('test.png')
plot(x, y)
dev.off()}
g = function(n){
x = rnorm(n)
y = rnorm(n)
plot(x, y)}
system.time(f(100000))
system.time(g(100000))
用 memory.limit() 增加内存帮助了我......这是用 ggplot 绘制近 36K 记录。
memory.limit(size=2000)
用(或更大的东西)扩展可用内存有帮助吗?