【问题标题】:for loop in r not working [duplicate]r中的for循环不起作用[重复]
【发布时间】:2015-01-05 21:03:28
【问题描述】:

我们有一个向量的向量

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])
}

【问题讨论】:

  • 因为你不打印,试试for (i in 1:3) print(mean(s[i]))
  • @DavidArenburg 成功了。谢谢。 akrun,谢谢你让我知道

标签: r loops for-loop


【解决方案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

【讨论】:

    猜你喜欢
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2016-01-18
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    相关资源
    最近更新 更多