无法在R中分配向量
错误:无法分配大小为19.2 Mb的向量无法在R中分配向量,r,memory,R,Memory,错误:无法分配大小为19.2 Mb的向量 我有5.csv文件,每个文件都有100万个条目。现在我想读取数据帧中的所有内容并执行一些计算,但我不能这样做,因为它不读取文件。如何解决这个问题?最简单的答案是:购买更多的RAM。如果您经常在R中处理大型数据集,这是值得的。如果您没有足够的内存来加载文件,那么您可能也没有足够的内存来处理这些文件 让我们假设您可以将这些数据保存在RAM中,并根据自己的意愿对其进行操作,以便将其读入是您唯一的问题。对你问题的评论提供了一些想法。您也可以使用scan()来读取
我有5.csv文件,每个文件都有100万个条目。现在我想读取数据帧中的所有内容并执行一些计算,但我不能这样做,因为它不读取文件。如何解决这个问题?最简单的答案是:购买更多的RAM。如果您经常在R中处理大型数据集,这是值得的。如果您没有足够的内存来加载文件,那么您可能也没有足够的内存来处理这些文件 让我们假设您可以将这些数据保存在RAM中,并根据自己的意愿对其进行操作,以便将其读入是您唯一的问题。对你问题的评论提供了一些想法。您也可以使用
scan()
来读取文件,而不是read.csv
。它需要更多的设置,但速度更快,内存相对友好
有几个软件包可以帮助那些数据太大而无法存储的人。我熟悉的一个(尽管由于RAM价格下降,我已经多年没有使用它了)是filehash
。这会将数据存储在磁盘上而不是RAM上,但您仍然以相同的方式与它交互。这会更慢,但可能会解决您的问题
test=ldply(list.files(path="C:/rcsv",pattern="csv",full.names=TRUE),function(filename) {
dum=read.csv(filename)
dum$filename=filename
return(dum)
})
库(filehash)
dbCreate('tmp.db')
dbhandle我怀疑它加载的数据比你想象的要多得多。您能否将print(filename)
和print(str(dum))
添加到匿名函数中,并将输出包含在您的问题中?我认为这意味着它无法分配另一个大小为19.2Mb的chunck.-1内存使用情况在?read.csv
中讨论。给出了警告,并提供了解决方案。对不起,这里没有同情。从?read.csv
:“这些函数在读取大文件时会使用惊人的内存量。在中进行了广泛的讨论,在此补充说明……如果指定了colClasses
,将使用更少的内存……使用nrows
,即使稍微高估,也会有助于内存使用。”您似乎没有尝试过任何建议的解决方案。将nrows=1.1e6
添加到您的read.csv
呼叫中真的有那么难理解吗?真正地说你有“更重要的事情要做”并不是从那些同样有更重要事情要做的人那里得到帮助的好方法。filehash不适用于我的R版本,但第二种方法看起来不错。谢谢
library(filehash)
dbCreate('tmp.db')
dbhandle <- dbInit('tmp.db')
db <- db2env(dbhandle)
db$test <- ldply(list.files(path="C:/rcsv",pattern="csv",full.names=TRUE),
function(filename) {
db$dum <- read.csv(filename)
db$dum$filename <- filename
return(dum)
})