我正在尝试使用R使用1909x139352数据集。由于我的计算机只有2GB的RAM,因此传统方法的数据集太大(500MB)。所以我决定使用ff
包。但是,我遇到了一些麻烦。函数read.table.ffdf
无法读取第一个数据块。它崩溃了下一个错误:
txtdata <- read.table.ffdf(file="/directory/myfile.csv",
FUN="read.table",
header=FALSE,
sep=",",
colClasses=c("factor",rep("integer",139351)),
first.rows=100, next.rows=100,
VERBOSE=TRUE)
read.table.ffdf 1..100 (100) csv-read=77.253sec
Error en ff(initdata = initdata, length = length, levels = levels, ordered = ordered, :
write error
有没有人知道发生了什么事?
答案 0 :(得分:2)
此错误消息表明您打开的文件太多。在ff中,ffdf中的每一列都是一个文件。您只能打开有限数量的文件 - 而且您已达到该数字。请参阅Any ideas on how to debug this FF error?上的回复。
所以在你的情况下,使用简单的read.table.ffdf是行不通的,因为你有139352列。但是可以在ff中导入它,但是在打开列时需要小心,同时在RAM中获取数据以避免此问题。
答案 1 :(得分:1)
你的数据集真的不是那么大..
如果你说一下你正在尝试用它做些什么,这可能会有所帮助。
这可能会有所帮助:Increasing Available memory in R
要么
如果这不起作用,data.table包非常快,并且在使用:=运算符操作data.tables时不会占用内存。
和
至于read.table.ffdf,请查看.. read.table.ffdf tutorial,如果仔细阅读,它会提供有关使用gc()等命令优化内存使用情况的提示和详细信息。
答案 2 :(得分:0)
我最近遇到了这个问题,数据框有~3,000列。解决此问题的最简单方法是调整允许为您的用户帐户打开的最大文件数。典型系统设置为~1024,这是一个非常保守的限制。 请注意,它设置为阻止服务器上的资源耗尽。
将以下内容添加到/etc/security/limits.conf
文件中。
youruserid hard nofile 200000 # you may enter whatever number you wish here
youruserid soft nofile 200000 # whatever you want the default to be for each shell or process you have running
在/etc/sysctl.con
文件中添加或编辑以下内容。
kern.maxfilesperproc=200000
kern.maxfiles=200000
您需要退出并重新登录,但原始海报可以使用ffdf打开他的139352列数据框。
我发布了更多关于my run-in with this limit here的信息。