2

我想在 R 中复制 Mathematica 的 Tuples[list, n] 的行为。例如,

Tuples[{0, 1}, 3] = 
{{0, 0, 0}, {0, 0, 1}, {0, 1, 0}, {0, 1, 1}, {1, 0, 0}, 
{1, 0, 1}, {1, 1, 0}, {1, 1, 1}}. 

在 R 中,我想要以下结果:

tuples(c(0,1), 3) = list( c(0, 0, 0), c(0, 0, 1), c(0, 1, 0), 
c(0, 1, 1), c(1, 0, 0), c(1, 0, 1), c(1, 1, 0), c(1, 1, 1) ) 

或类似的东西,我可以提取子列表 c(0,0,0) 等。

有这个命令吗?或者我该如何编程?提前致谢。

4

2 回答 2

2

这是一种方法:

tuples <- function(x, n) do.call(expand.grid, rep(list(x), n))

tuples(0:1, 3)
#   Var1 Var2 Var3
# 1    0    0    0
# 2    1    0    0
# 3    0    1    0
# 4    1    1    0
# 5    0    0    1
# 6    1    0    1
# 7    0    1    1
# 8    1    1    1

我认为将其保留为矩阵或 data.frame 更有意义,因为所有元素都具有相同的长度。

于 2012-04-25T05:06:34.683 回答
2

combinatorics 包,'combinat' 版本 0.0-8,包含一个名为 hcube 的函数,它也可以用来生成像 Mathematica 这样的元组,例如:

hcube(c(2,2,2), translation=c(-1,-1,-1))

     [,1] [,2] [,3]
[1,]    0    0    0
[2,]    1    0    0
[3,]    0    1    0
[4,]    1    1    0
[5,]    0    0    1
[6,]    1    0    1
[7,]    0    1    1
[8,]    1    1    1
于 2013-10-09T21:57:24.437 回答