1

朋友们。

由于我的数据量很大,我正在使用 ff 和 ffbase 包。我的问题是关于 ffdfappend()。我有不同的 ffsf 文件保存为 .csv。我需要做的是加载所有文件并应用 ffdfd 函数来创建一个大的 ffdf 文件。我这样做是一个循环:

files<-list.files()  
for (i in 1:length(files)){
fdata = read.csv.ffdf(file=files[i], first.rows=400, colClasses=NA)   
colnames(fdata)<-c('fecha','juliano','UTM_X','UTM_Y','temp','pp','f_ocur', 'altitud')  
if (i == 1){data=fdata} else {data<-ffdfappend(data, fdata, adjustvmode=F)}  
delete(fdata); rm(fdata)
}

我可以轻松读取文件夹中的文件。问题是当我想将它们“附加”到一个 ffdf 对象中时。R告诉我这个:

Error en sort.list(y) : 'x' must be atomic for 'sort.list'  
Have you called 'sort' on a list?***

我不明白在告诉我什么,所以我无法解决问题。

str(files)
chr [1:6] "102c1b481014.csv" "102c2211788.csv" "102c32963052.csv" "102c32f1798.csv" "102c3a2517f1.csv" "102c4e7513f0.csv"

如果有人可以帮助我理解或解决这个问题,我将不胜感激

4

1 回答 1

3

ffdfappend 基本上用于将 data.frame 附加到 ffdf。我不知道这是否是一个选项,但是在附加到 ffdf 之前将每个 data.frame 加载到 RAM 中会起作用,如下所示。

files<-list.files()  
for (i in 1:length(files)){
  fdata = read.csv.ffdf(file=files[i], first.rows=400, colClasses=NA)   
  colnames(fdata)<-c('fecha','juliano','UTM_X','UTM_Y','temp','pp','f_ocur', 'altitud')  
  if (i == 1){data=fdata} else {data<-ffdfappend(data, fdata[,], adjustvmode=TRUE)}  
  delete(fdata); rm(fdata)
}

另一种选择是使用 read.csv.ffdf 的 x 参数。如下所示。但是您的数据确实需要具有相同的结构。

files<-list.files()  
fdata = read.csv.ffdf(file=files[1], first.rows=400, colClasses=NA)
for (i in 2:length(files)){
  fdata = read.csv.ffdf(x = fdata, file=files[i], first.rows=400, colClasses=NA)   
}
于 2012-12-21T13:46:53.323 回答