J.Z*_*.Z. 1 combinations r matrix
我正在尝试构建一个包含所有可能组合的矩阵.例如,
a=(1:2)^3 #=c(1,8)
b=(1:3)^2 #=c(1,4,9)
Run Code Online (Sandbox Code Playgroud)
我想定义c这样的c=c(1+1,1+4,1+9,8+1,8+4,8+9).我从前一个问题中学到了如何c从函数中获得这样的函数outer.我目前的问题是,如何获得M如下矩阵:
提前致谢!
我们可以使用expand.grid与outer
data.frame(expand.grid(a, b), c = c(outer(a, b, "+")))
# Var1 Var2 c
#1 1 1 2
#2 8 1 9
#3 1 4 5
#4 8 4 12
#5 1 9 10
#6 8 9 17
Run Code Online (Sandbox Code Playgroud)
哪里
outer(a, b, "+") #gives
# [,1] [,2] [,3]
#[1,] 2 5 10
#[2,] 9 12 17
Run Code Online (Sandbox Code Playgroud)
好的,这是:
z <- outer(b, a, "+")
cbind(a[col(z)], b[row(z)], c(z))
# [,1] [,2] [,3]
#[1,] 1 1 2
#[2,] 1 4 5
#[3,] 1 9 10
#[4,] 8 1 9
#[5,] 8 4 12
#[6,] 8 9 17
Run Code Online (Sandbox Code Playgroud)
略微适应的expand.grid解决方案.
ref <- expand.grid(b = b, a = a)
val <- do.call("+", ref) ## or `rowSums(ref)` with an implicit `as.matrix`
cbind(ref, c = val)
# b a c
#1 1 1 2
#2 4 1 5
#3 9 1 10
#4 1 8 9
#5 4 8 12
#6 9 8 17
Run Code Online (Sandbox Code Playgroud)
在这种情况下,结果是数据帧而不是矩阵.