【问题标题】:Saving results from three for-loop as a vector将三个 for 循环的结果保存为向量
【发布时间】:2019-11-23 17:42:54
【问题描述】:

[假设我们有三个向量b1b2b3,我需要遍历它们所有可能的值组合并将它们的乘积存储在一个新向量中。例如,

b1 <- seq(0.2, 2, by=0.2)
b2 <- seq(0.2, 2, by=0.2)
b3 <- seq(0.2, 2, by=0.2)

product <- vector()

for (i in 1:length(b1))
{
  for (j in 1:length(b2))
  {
    for (k in 1:length(b3))
    {
      product[i] <- b1[i]*b2[j]*b3[k]
    }
  }
}

现在的问题是 product 只存储 10 个值。如何解决这个索引问题?

【问题讨论】:

    标签: r for-loop indexing


    【解决方案1】:

    要解决循环中的索引问题,您可以添加一个新变量,比如说counter,它会随着循环中的每次迭代而递增。

    counter <- 1
    for (i in 1:length(b1)) {
       for (j in 1:length(b2))  {
         for (k in 1:length(b3)) {
           product[counter] <- b1[i]*b2[j]*b3[k]
           counter = counter + 1
        }
      }
    }
    

    您也可以使用outer,它会给您相同的结果。

    c(outer(b3, c(outer(b1, b2))))
    

    如果有多个这样的向量将它们放在一个列表中并使用Reduce

    c(Reduce(outer, list(b1, b2, b3)))
    

    请注意,outer 期望将函数应用于向量的组合,但由于乘法 (*) 是默认函数,因此我们在此不再提及。

    【讨论】:

      猜你喜欢
      • 2014-12-07
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2017-07-03
      • 2018-08-12
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      相关资源
      最近更新 更多