2012-04-25 56 views
2

我想複製的Mathematica的元組[列表中,n]的行爲在R.例如,元組中的R以下的Mathematica元組[列表中,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)的東西,等

有沒有這樣的命令?或者我該如何編程?提前致謝。

回答

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因爲所有元素都具有相同的長度。

2

的組合學包,「combinat」 0.0-8版本,包含一個稱爲hcube

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 
函數,它也可以被用於產生像數學元組,例如: