【发布时间】:2016-03-16 18:26:46
【问题描述】:
我想创建一个矩阵,其中包含所有可能的两列组合的乘积。假设矩阵有 6 列 4 行,那么我的输出矩阵有 15 列和 4 行。
【问题讨论】:
我想创建一个矩阵,其中包含所有可能的两列组合的乘积。假设矩阵有 6 列 4 行,那么我的输出矩阵有 15 列和 4 行。
【问题讨论】:
combn 有一个 FUN 选项。所以,我们可以直接传递combn里面的函数。 (以@RHertel 为例)
combn(n_col,2, FUN=function(x) x[1]*x[2])
#[1] 2 3 4 5 6 6 8 10 12 12 15 18 20 24 30
或者不使用匿名函数,可以调用prod
combn(n_col,2, FUN=prod)
#[1] 2 3 4 5 6 6 8 10 12 12 15 18 20 24 30
【讨论】:
假设你的原始矩阵是df
cols <- combn(ncol(df), 2, simplify=F, FUN=as.numeric)
cbind.data.frame(
lapply(cols, function(x){
apply(df[, x], 1, prod)
})
)
【讨论】:
这是一种可能性:
n_col <- 6
t(as.matrix(combn(n_col,2)[1,]*combn(n_col,2)[2,]))
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
#[1,] 2 3 4 5 6 6 8 10 12 12 15 18 20 24 30
或者您可以使用 matrixStats 包中的 colProds 函数来乘以列:
library(matrixStats)
n_col <- 6
t(as.matrix(colProds(combn(n_col,2))))
【讨论】: