【发布时间】:2011-09-06 02:41:56
【问题描述】:
我有一个 4.5MB(9,223,136 行)的文件,其中包含以下信息:
0 0
0.0147938 3.67598e-07
0.0226194 7.35196e-07
0.0283794 1.10279e-06
0.033576 1.47039e-06
0.0383903 1.83799e-06
0.0424806 2.20559e-06
0.0465545 2.57319e-06
0.0499759 2.94079e-06
在每一列中,一个值表示一个从 0 到 100 的值,表示百分比。我的目标是在 ggplot2 中绘制一个图形以查看它们之间的百分比(例如,对于 column1 的 20%,column2 的百分比是多少)。这是我的 R 脚本:
library(ggplot2)
dataset=read.table("~/R/datasets/cumul.txt.gz")
p <- ggplot(dataset,aes(V2,V1))
p <- p + geom_line()
p <- p + scale_x_continuous(formatter="percent") + scale_y_continuous(formatter="percent")
p <- p + theme_bw()
ggsave("~/R/grafs/cumul.png")
我遇到了一个问题,因为每次我运行这个 R 时都会耗尽内存,并给出错误:“无法分配大小为 128.0 Mb 的向量”。我在 Linux 机器上运行 32 位 R,我有大约 4GB 的可用内存。
我想到了一种解决方法,包括降低这些值的精度(通过四舍五入)并消除重复的行,以便我在数据集上的行更少。你能给我一些关于如何做到这一点的建议吗?
【问题讨论】:
-
您的工作区中还有其他对象吗?当这种情况发生在我身上时,我通常会保存我需要的对象,然后使用干净的工作区重新启动。如果您删除不需要的对象,调用 gc() 也可能会有所帮助。
-
@richie 我开始一个干净的 R 会话,只调用这个脚本:
/usr/bin/R CMD BATCH --vanilla --no-timing ~/scripts/R/grafs/cumul.R ~/R/scripts_output/cumul.txt -
脚本是只创建上面的例子还是创建更多的对象?
-
@richiemorrisroe 我尝试在 8GB RAM、64-Win 上运行它(使用虚拟数据和干净的工作区)。当我杀死它时,进程达到 6GB。所以唯一的办法就是限制数据的大小。