将三个for循环的结果保存为向量

时间:2019-07-15 02:32:05

标签: r for-loop indexing

[假设我们有三个向量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]
    }
  }
}

现在的问题是产品仅存储10个值。如何解决该索引问题?

1 个答案:

答案 0 :(得分:3)

要解决循环中的索引问题,您可以添加一个新变量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希望将一个函数应用于向量的组合,但是由于乘法(*)是默认函数,因此在此不再赘述。