9

我有一个包含大约 2000 万行的输入文件。文件大小约为 1.2 G。无论如何我可以在 R 中绘制数据。有些列有类别,其中大部分是数字。

我已经用大约 800K 行的输入文件的一小部分尝试了我的绘图脚本,但是即使我有大约 8G 的 RAM,我似乎也无法绘制所有数据。有什么简单的方法可以做到这一点。

4

5 回答 5

14

如果没有更清楚地描述你想要的情节,很难给出具体的建议。但是,一般来说,没有必要在一个图中绘制 2000 万个点。例如,时间序列可以由样条拟合或某种平均值表示,例如将每小时数据汇总为每日平均值。或者,您可以绘制数据的一些子集,例如在时间序列示例中每天只绘制一个点。所以我认为你的挑战不是在一个情节上获得 2000 万分,甚至 800k,而是如何有效地聚合你的数据,以传达你想要传达的信息。

于 2012-05-30T07:50:57.340 回答
5

正如 Ben Bolker 在Speed up plot() function for large dataset中所建议的,用于绘制 hexbins 而不是散点图的包 hexbin 对我来说相当适用于 4GB RAM 的 200 万条记录。但是对于同一组变量的 2 亿条记录/行,它失败了。我尝试减小 bin 大小以调整计算时间与 RAM 使用情况,但没有帮助。

对于 2000 万条记录,您可以尝试使用 xbins = 20,30,40 开始的 hexbins。

于 2014-05-06T05:24:31.410 回答
3

直接绘制到光栅文件设备(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))
于 2012-05-30T05:40:35.157 回答
1

用 memory.limit() 增加内存帮助了我......这是用 ggplot 绘制近 36K 记录。

于 2017-12-05T12:17:08.390 回答
0

memory.limit(size=2000)用(或更大的东西)扩展可用内存有帮助吗?

于 2012-05-29T20:45:05.953 回答