调用列表中的data.frame

时间:2012-12-12 18:06:09

标签: r list dataframe apply

我导入了多个read.table文件并将其命名为file1,file2,file3,... 我已将所有data.frames(read.table文件)放入列表中:

ClassFilter <- function(x) inherits(get(x), 'data.frame' )
Objs <- Filter( ClassFilter, ls() )

现在我想调用每个data.frame(例如file1)并做一个列意思:

for(x in 1:NumberOfFiles){
  mean[NumberOfFiles:400] <- apply(Objs[[x]],2,mean)
}

问题是Objs [[x]]给我一个错误“应用中的错误(Objs [[x]],2,mean):dim(X)必须有一个正长度”作为列表中的元素没有指向data.frame。任何人都知道我如何使list元素指向最初创建列表的data.frame?谢谢

1 个答案:

答案 0 :(得分:1)

Objs包含data.frame个变量的名称,因此您必须先使用get()函数获取变量:

for(x in 1:NumberOfFiles){
  Mean[NumberOfFiles:400] <- apply(get(Objs[x]),2,mean)
}

或者如果您愿意,也可以“评估”变量名称:

for(x in 1:NumberOfFiles){
  Mean[NumberOfFiles:400] <- apply(eval(as.name(Objs[x])),2,mean)
}

另外,正如@SeñorO正确指出的那样,您应该为mean对象指定一个不同的名称,以避免与函数均值冲突。