我们有一个载体载体
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])
}
答案 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