【发布时间】:2013-09-05 01:25:22
【问题描述】:
我有一个以 GB 为单位的大型数据集,我必须在分析它们之前对其进行处理。 我尝试创建一个连接器,它允许我循环遍历大型数据集并一次提取块。这允许我隔离满足某些条件的数据。
我的问题是,我无法为连接器创建一个指标,规定它为空,并在到达数据集末尾时执行 close(connector)。此外,对于提取的第一块数据,我必须跳过 17 行,因为该文件包含 R 无法读取的标头。
有效的手动尝试:
filename="nameoffile.txt"
con<<-file(description=filename,open="r")
data<-read.table(con,nrows=1000,skip=17,header=FALSE)
data<-read.table(con,nrows=1000,skip=0,header=FALSE)
.
.
.
till end of dataset
由于我想避免手动键入上述命令,直到我到达数据集的末尾,我尝试编写一个循环来自动化该过程,但没有成功。
我尝试循环失败:
filename="nameoffile.txt"
con<<-file(description=filename,open="r")
data<-read.table(con,nrows=1000,skip=17,header=FALSE)
if (nrow(rval)==0) {
con <<-NULL
close(con)
}else{
if(nrow(rval)!=0){
con <<-file(description=filename, open="r")
data<-read.table(conn,nrows=1000,skip=0,header=FALSE)
}}
【问题讨论】:
-
你调查过
ff包和read.table.ffdf吗? -
仅使用基本 R 来解决这个问题并不是一个好主意。包
ff、bigmemory甚至data.table浮现在脑海。 -
文本文件中以GB为单位存储的文件实际上并不是很大。在分析之前尝试压缩它们。主要限制是读取磁盘 (I/O)。您可以使用 read.table 并将其保存为压缩级别为 9 的 RData 格式。压缩率约为 10%,具体取决于您的内容,最后您的文件只有 MB。
-
也许包 LaF 对你也有用?
标签: r large-files connector chunks