for循环在r不工作

时间:2014-11-09 13:52:00

标签: r loops for-loop

我们有一个载体载体

s = c(c(7,6,8,5,9),c(3,2,4),c(6,5,7))

为什么这会向控制台输出正确的值

mean(s[1])
mean(s[2])
mean(s[3])

而以下几乎没有产生任何结果?

for (i in 1:3) {
   mean(s[i])
}

1 个答案:

答案 0 :(得分:1)

通过c,我们将三个vectors连接到一个vector。因此,s[1]s[2]s[3]的平均值将是单个元素而非向量的平均值。即。

s = c(c(7,6,8,5,9),c(3,2,4),c(6,5,7))
s[1]
#[1] 7
s[2]
#[1] 6
s[3]
#[1] 8

但是,如果我们假设您有一个vectors

列表
 s <- list(c(7,6,8,5,9),c(3,2,4),c(6,5,7))

您可以使用sapply

获取列表元素的均值
 sapply(s, mean)
 #[1] 7 3 6

基于for循环代码,如果您使用[而不是[[作为列表

  for(i in 1:3){ print(mean(s[i]))}
  #[1] NA
  #[1] NA
  #[1] NA
  #Warning messages:
 #1: In mean.default(s[i]) :
 #argument is not numeric or logical: returning NA

  for(i in 1:3){ print(mean(s[[i]]))}
  #[1] 7
  #[1] 3
  #[1] 6

为了存储输出,我们可以创建一个新对象Out

  Out <- vector('numeric', length(s))
  for(i in 1:3) Out[i] <- mean(s[[i]])
  Out
  #[1] 7 3 6