我怎么写这个循环?

时间:2014-07-22 20:52:36

标签: r

我有五个数据帧(a-f),每个数据帧都有一个'nq'列。我想找到nq列的最大值,最小值和平均值

classes <- c("a","b","c","d","e","f")
for (i in classes){
format(max(i$nq), scientific = TRUE)
format(min(i$nq), scientific = TRUE)
format(mean(i$nq), scientific = TRUE)
}

但代码无效。你能帮忙吗?

2 个答案:

答案 0 :(得分:3)

您不能将字符值用作data.frame名称。值“a”与data.frame a不同。

你可能不应该有一堆data.frames。您可能希望将它们全部放在列表中。然后你可以对它们进行讨论以获得结果。

mydata <- list(
  a = data.frame(nq=runif(10)),
  b = data.frame(nq=runif(10)),
  c = data.frame(nq=runif(10)),
  d = data.frame(nq=runif(10))
)

然后你可以做

lapply(mydata, function(x) 
    format(c(max(x$nq), min(x$nq), mean(x$nq)), scientific = TRUE)
)

一次获取所有值。

答案 1 :(得分:0)

它不起作用的原因是因为&#39; i&#39;是一个字符/字符串。正如Mr.Flick已经提到的,你必须把它变成一个列表。 或者,您可以编写get(i)$ nq而不是在循环中编写i $ nq。 get()函数将按名称在工作空间中搜索对象,它将返回对象本身。但是,这并不像将其列入列表并使用lapply那样干净。