如何枚举R中矩阵中的所有组合?

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如下矩阵:

在此输入图像描述

提前致谢!

Ron*_*hah 5

我们可以使用expand.gridouter

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)


李哲源*_*李哲源 5

好的,这是:

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)

在这种情况下,结果是数据帧而不是矩阵.