跟踪矢量的每个元素与另一个矢量的总和

时间:2017-04-30 05:31:58

标签: r vector sum

我有两个向量,我想将向量a的每个元素加到向量b。但我想跟踪ab中哪些元素会给我这个价值。我尝试了以下方法来获取输出:

a <- 1:3
b <- 4:6

store <- list()

for(i in 1:length(b)){
        for(j in 1:length(a)){
                total <- b[i] + a[j]
                store[[paste0("a",i, "+","b",j)]] <- total  
        }        
}

## output
> unlist(store)
## a1+b1 a1+b2 a1+b3 a2+b1 a2+b2 a2+b3 a3+b1 a3+b2 a3+b3 
## 5     6     7     6     7     8     7     8     9 

但我发现使用嵌套的for循环是不灵活的,因为如果ab的长度不同,它将无法正常工作。

我遇到了outer()函数,我可以使用一行代码轻松地获得与上面相同的结果:

c(outer(a,b,`+`))
##[1] 5 6 7 6 7 8 7 8 9 

然而,我失去了能够给我这个价值的那对。

如何在不使用循环的情况下跟踪对?

1 个答案:

答案 0 :(得分:1)

我们可以使用第二个outer来获取names并使用分配第一个的名称

nm <- outer(seq_along(a), seq_along(b), FUN = function(x, y) sprintf('a%d + b%d', x, y))
res <- setNames(c(outer(a,b,`+`)), nm)
res 
#   a1 + b1 a2 + b1 a3 + b1 a1 + b2 a2 + b2 a3 + b2 a1 + b3 a2 + b3 a3 + b3 
#      5       6       7       6       7       8       7       8       9