Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在R中分配向量_R_Memory - Fatal编程技术网

无法在R中分配向量

无法在R中分配向量,r,memory,R,Memory,错误:无法分配大小为19.2 Mb的向量 我有5.csv文件,每个文件都有100万个条目。现在我想读取数据帧中的所有内容并执行一些计算,但我不能这样做,因为它不读取文件。如何解决这个问题?最简单的答案是:购买更多的RAM。如果您经常在R中处理大型数据集,这是值得的。如果您没有足够的内存来加载文件,那么您可能也没有足够的内存来处理这些文件 让我们假设您可以将这些数据保存在RAM中,并根据自己的意愿对其进行操作,以便将其读入是您唯一的问题。对你问题的评论提供了一些想法。您也可以使用scan()来读取

错误:无法分配大小为19.2 Mb的向量


我有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)
})