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