2014-10-27 73 views
0

我想遍历文件列表并记录关于它们的详细信息(大小,行数,列方式)。文件夹中的文件详细信息

我刚开始与存储在数据帧的信息:

df<-data.frame() 
all <-list.files(pattern=".csv") 

for (i in all){ 
    file<-read.csv(i) 

    filas<-nrow(file) 
    cols<-ncol(file) 

    info<-c(i,filas,cols) 
    df<-rbind(df,i,filas,cols) 
} 

,但它触发引起的“i”的变量,它仅仅是一个文件名错误。我究竟做错了什么?

在此先感谢,p。

回答

3

请勿使用for循环。相反,将lapplydo.call组合使用即可获得您想要的结果。尝试:

do.call(rbind,lapply(all,function(x) {y<-read.csv(x); c(file=x, filas=nrow(y), cols=ncol(y))})) 

你的做法是在rbind为了工作,因为失败,你需要两个data.frames具有相同的列数。您最初创建了一个空的data.frame(带有0列),并且这不能被rbind编辑为长度为3的矢量(假定您想为每个文件显示文件名,行数和列数) 。如果你真的想使用for循环,你应该这样做:

 for (i in 1:length(all)) { 
     file<-read.csv(all[i]) 
     info<- data.frame(file=all[i], filas=nrow(file), cols=ncol(file)) 
     if (i==1) df<-info else df<-rbind(df,info) 
    } 
+2

或许也解释到OP为什么'rbind'是失败? – hrbrmstr 2014-10-27 15:59:58

+0

你说得对。我会编辑它。 – nicola 2014-10-27 16:00:21

+0

尽可能清楚,非常感谢。 – user3310782 2014-10-27 16:14:42

相关问题