[假设我们有三个向量b1
,b2
和b3
,我需要遍历所有可能的值组合并将其乘积存储在新向量中。例如,
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个值。如何解决该索引问题?
答案 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
希望将一个函数应用于向量的组合,但是由于乘法(*
)是默认函数,因此在此不再赘述。