通过向量调用for循环中的数据帧

时间:2013-01-04 17:53:25

标签: r

我有一些data.frames

dat1=read.table...
dat2=read.table...
dat3=read.table...

我会计算每个数据集的行数。所以 名称保存如下(不能“更改”)vector = c(“dat1”,“dat2”,“dat3 ...)

p <- vector(numeric, length=1:length(dat))
counting <- function(x) {for (i in 1:x){
      p[i]<-nrow(dat[i])}
return(p)
}

这不起作用,因为nrow的输入是一个字符,但我需要整数(?)或?

寻求帮助

2 个答案:

答案 0 :(得分:3)

您可以使用get,但要小心!而是以list读取表格是R-ish方式:

file.names <- list.files()

dat <- lapply(file.names, read.table)

然后您拥有lapplyapply家庭的所有便利,例如:

lapply(dat, nrow)

使用get的解决方案(同样vector是一个错误的变量名称,因为它是一个非常重要的函数):

lapply(vector, function(x) nrow(get(x)))

您的方法失败,因为没有名为dat的对象要编入索引。 for loop可能如下所示:

p = NULL
for(v in vector) {
  p <- c(p, nrow(get(v)))
}

但由于很多原因,这种技术形式很差......

答案 1 :(得分:1)

如果您想确定.GlobalEnv中您知道的项目的属性,则可以:

> sapply( c("A","B"), function(objname) nrow(.GlobalEnv[[objname]])  )
A B 
5 4 

您可以将任何字符向量替换为c(“A”,“B”)`。如果对象不在全局环境中,它只返回NULL,因此它非常健壮。