对n个元素使用expand.grid函数

时间:2018-09-23 23:31:35

标签: r combinations permutation

我需要生成1:n次重复n次的所有组合。 n = 4的示例:

expand.grid(1:4, 1:4, 1:4, 1:4)

但是,n较大时,此方法将需要大量键入。有一种有效的方法可以做到这一点吗?我尝试过paste,但无法正常工作。

2 个答案:

答案 0 :(得分:3)

我们可以rep分成list并应用expand.grid

n <- 4
expand.grid(rep(list(seq_len(n)), n))

或使用replicate

expand.grid(replicate(n, seq_len(n), simplify = FALSE))

答案 1 :(得分:3)

首先,您要查找具有重复而非组合的排列。其次,在R中有几个软件包可以有效地获得此信息。有经典的软件包gtools和两个高效的编译库arrangementsRcppAlgos(我是作者):

## library(gtools)
gtools::permutations(4, 4, repeats.allowed = TRUE)

## library(arrangements)
arrangements::permutations(4, 4, replace = TRUE)

## library(RcppAlgos)
RcppAlgos::permuteGeneral(4, 4, TRUE)