R 如何将n不相等的多个向量与另一个元素中的每个元素交叉相加

R 如何将n不相等的多个向量与另一个元素中的每个元素交叉相加,r,R,如果我有 A<-c(1,7) B<-c(8,9) C<-c(10,11,13) A我们可以使用expand.grid和rowSums rowSums(expand.grid(A, B, C)) #[1] 19 25 20 26 20 26 21 27 22 28 23 29 一些解释-expand.grid为a、B和C的每个组合返回一行 expand.grid(A, B, C) # Var1 Var2 Var3 #1 1 8 10 #2 7

如果我有

A<-c(1,7)
B<-c(8,9)
C<-c(10,11,13)

A我们可以使用
expand.grid
rowSums

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

#[1] 19 25 20 26 20 26 21 27 22 28 23 29
一些解释-
expand.grid
a
B
C
的每个组合返回一行

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
然后我们对每一行取
sum


我们也可以使用双
outer

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

编辑

如果输出的顺序很重要,我们可以使用
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 

这里有一个带有
CJ

library(data.table)
CJ(A, B, C)[, Reduce(`+`, .SD)]
#[1] 19 20 22 20 21 23 25 26 28 26 27 29

谢谢你的回答,但仔细检查后,我发现你错了,答案应该是19202202323252626272729,而不是1925202622728229。您能稍微修改一下吗?谢谢您的更新,但它仍然不够通用,因为它假设每个向量都是单调递增的,如果C谢谢您的回答,很抱歉问题不清楚,请查看更新。@BenZ我查看了顺序。
CJ
输出的顺序似乎相同。。您可以在这里查看订单
CJ(沿(A)、沿(B)、沿(C))
@BenZ,如果您查看订单
CJ(沿(A)、沿(B)、沿(C))
这是发生的顺序,您对
C的评论也可以。不清楚你的逻辑
c(outer(outer(A, B, "+"), C, "+"))
#[1] 19 25 20 26 20 26 21 27 22 28 23 29
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 
rowSums(mat[do.call(order,mat), ])
#19 20 22 20 21 23 25 26 28 26 27 29 
library(data.table)
CJ(A, B, C)[, Reduce(`+`, .SD)]
#[1] 19 20 22 20 21 23 25 26 28 26 27 29