如何交叉添加多个不等n的向量,每个元素在另一个元素中

Ben*_*n Z 2 r

如果我有

A<-c(1,7)
B<-c(8,9)
C<-c(10,11,13)
Run Code Online (Sandbox Code Playgroud)

我希望有

 Sum<-c(1+8+10, 1+8+11, 1+8+13, 1+9+10, 1+9+11, 1+9+13, 7+8+10, 7+8+11, 7+8+13, 
        7+9+10, 7+9+11, 7+9+13)
Run Code Online (Sandbox Code Playgroud)

在R中有一个简单的方法吗?

*********更新************

对不起以前不清楚,我真的希望寻求一个普遍的解决方案,比如说我有

A<-c(a1,a2)
B<-c(b1,b2)
C<-c(c1,c2,c3)
Run Code Online (Sandbox Code Playgroud)

而我真正希望的是

 Sum<-c(a1+b1+c1, a1+b1+c2, a1+b1+c3, a1+b2+c1, a1+b2+c2, a1+b2+c3,a2+b1+c1, a2+b1+c2, a2+b1+c3, a2+b2+c1, a2+b2+c2, a2+b2+c3)
Run Code Online (Sandbox Code Playgroud)

无论ABC的值如何,都保持此顺序.

更新2

正确的答案应该是expand.grid(C,B,A)

Ron*_*hah 6

我们可以使用expand.gridrowSums

rowSums(expand.grid(A, B, C))

#[1] 19 25 20 26 20 26 21 27 22 28 23 29
Run Code Online (Sandbox Code Playgroud)

一些解释- expand.grid返回一排的每个组合A,BC

expand.grid(A, B, C)

#   Var1 Var2 Var3
#1     1    8   10
#2     7    8   10
#3     1    9   10
#4     7    9   10
#5     1    8   11
#6     7    8   11
#7     1    9   11
#8     7    9   11
#9     1    8   13
#10    7    8   13
#11    1    9   13
#12    7    9   13
Run Code Online (Sandbox Code Playgroud)

然后我们采取sum每一行.


我们也可以使用双倍 outer

c(outer(outer(A, B, "+"), C, "+"))
#[1] 19 25 20 26 20 26 21 27 22 28 23 29
Run Code Online (Sandbox Code Playgroud)

编辑

如果输出的顺序很重要,我们可以order在使用后使用它们expand.grid

mat <- expand.grid(A, B, C)
rowSums(mat[order(mat$Var1, mat$Var2, mat$Var3), ])
#19 20 22 20 21 23 25 26 28 26 27 29 
Run Code Online (Sandbox Code Playgroud)

或者,如果您有许多列,并且不希望按名称调用每个列,则可以执行此操作

rowSums(mat[do.call(order,mat), ])
#19 20 22 20 21 23 25 26 28 26 27 29 
Run Code Online (Sandbox Code Playgroud)