gpt4 book ai didi

r - R + ggplot2-无法分配大小为128.0 Mb的向量

转载 作者:行者123 更新时间:2023-12-01 17:46:02 25 4
gpt4 key购买 nike

我有一个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的可用内存。

我考虑了一种解决方法,该方法包括降低这些值的精度(通过四舍五入)并消除重复的行,以使数据集中的行数减少。您能给我一些建议吗?

最佳答案

您确定4.5 MB的文件中有900万行(编辑:也许您的文件为4.5 GB?)?它必须经过高度压缩-当我创建一个十分之一的文件时,它的大小为115Mb ...

n <- 9e5
set.seed(1001)
z <- rnorm(9e5)
z <- cumsum(z)/sum(z)
d <- data.frame(V1=seq(0,1,length=n),V2=z)
ff <- gzfile("lgfile2.gz", "w")
write.table(d,row.names=FALSE,col.names=FALSE,file=ff)
close(ff)
file.info("lgfile2.gz")["size"]

从给出的信息中很难分辨出数据集中有什么样的“重复行”…… unique(dataset)只会提取唯一的行,但这可能没有用。我可能首先将数据集细化100或1000:
smdata <- dataset[seq(1,nrow(dataset),by=1000),]

并看看它如何发展。 ( 编辑:忘记逗号了!)

大数据集的图形表示通常是一个挑战。一般来说,您会变得更好:
  • 在绘制数据之前以某种方式汇总数据
  • 使用专用的图形类型(密度图,轮廓线,六角形装仓)来减少数据
  • 使用基础图形,该图形使用“绘制并忘记”模型(除非在Windows中打开了图形记录,除非已打开图形记录),而不是点阵/ ggplot /网格图形,后者保存了完整的图形对象,然后将其渲染为
  • 使用光栅或位图图形(PNG等),它们仅记录图像中每个像素的状态,而不记录矢量图形,矢量图形保存所有对象,无论它们是否重叠
  • 关于r - R + ggplot2-无法分配大小为128.0 Mb的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6198531/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com