我想循环浏览一个文件列表并记录有关它们的详细信息(大小,行数,列数)。
我刚开始将信息存储在数据框中:
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)
}
但它会触发由“我”引起的错误。变量,它只是一个文件名。我做错了什么?
提前致谢,p。
答案 0 :(得分:3)
不要使用for
循环。而是将lapply
与do.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)
}