【问题标题】:Saving results of a for loop as a vector in R将 for 循环的结果保存为 R 中的向量
【发布时间】:2016-06-23 17:54:38
【问题描述】:

我正在进行一项实验,让人们聆听一系列音调(高音或低音)并计算高音。我有一个向量,他们实际听到了多少个音调(总共):

count=c(1, 3, 5, 4, 3, 1, 2, 4, 3, 5, 2)

所有参与者都听到同一系列音调的子集,按以下特定顺序:

list=c("high", "low", "low", "low", "high", "low", "high", "low", 
       "high", "high", "low", "low", "high", "low", "low")

我想具体了解每个参与者实际听到了多少个高音。所以,在这个例子中,如果他们总共听到 3 个音,他们只听到一个高音,但如果他们总共听到 5 个音,他们听到 2 个高音。

为此,我尝试创建一个 for 循环来计算每个参与者出现“高”的次数:

for (i in count){
  cat(length(grep("high", list[1:i])))
}

这会打印出所有正确的高音数字(在本例中为:11211111121)。但是,我想将此输出创建并存储为单个值的向量。

我的问题是,如何将这个 for 循环的输出保存为值向量?

【问题讨论】:

    标签: r for-loop vector


    【解决方案1】:

    这会将每个值作为一个条目存储在向量中。

    tones <- c("high", "low", "low", "low", "high", "low", "high", "low", 
           "high", "high", "low", "low", "high", "low", "low")
    
    count <- c(1, 3, 5, 4, 3, 1, 2, 4, 3, 5, 2)
    
    x <- NULL
    for (i in 1:length(count)){
    x[i]  <-  length(grep("high", list[1:count[i]]))
    }
    
    > x
     [1] 1 1 2 1 1 1 1 1 1 2 1
    

    【讨论】:

      【解决方案2】:

      通常最好避免 R 中的 for 循环。

      > vapply(count, function(i) sum(list[1:i] == 'high'), integer(1))
      [1] 1 1 2 1 1 1 1 1 1 2 1
      

      【讨论】:

        猜你喜欢
        • 2014-12-07
        • 2019-11-23
        • 1970-01-01
        • 2017-07-03
        • 2021-01-03
        • 2019-04-09
        • 1970-01-01
        • 2020-07-24
        • 2021-05-04
        相关资源
        最近更新 更多