我正在尝试使用ggplot和this multiplot function生成大量的直方图(大约100)。 multiplot
将一个绘图列表作为其主要参数,因此我生成一个列表:
plotlist <- lapply(mycolnames[1:num_plots],function(names) {
ggplot(mydata, aes_string(x=names, fill="Class")) + geom_density(alpha=.3)
})
每列有98000个点,列数与num_plots
一样多。这适用于num_plots=10
,但R在50
上死亡。不幸的是,RStudio没有公开跟踪,所以我不知道这是否是内存问题。 (我在Linux服务器上使用8GB。)
我看到了解决这个问题的几种方法:我可以随机抽样行,或者我可以把它放在一个10个循环中。是否有一般方法来处理我可以默认的数据量?
根据Martín的建议,我将一个情节分开,然后查看更大的名单:
> object.size(p1)
4683224 bytes
> object.size(plotlist) # here 30 plots, approximately 30x memory
140,497,000 bytes
这是4900个采样点。对于完整的98000,它看起来像这样:
> object.size(p1)
92,922,432 bytes
30倍,约为2.5GB。所以看起来我已经遇到了内存上限。
有趣的是,我似乎仅限于可用RAM。我该如何调整呢?
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 1879639 100.4 3094291 165.3 3094291 165.3
Vcells 141384288 1078.7 365457852 2788.3 476322412 3634.1
ulimit
报告对物理内存没有限制,这让我想知道这个R会话在哪里受到限制。