2012-02-23 40 views
21

Tôi muốn tạo ra một data.frame của tất cả các hoán vị có thể của 10 biến mà có thể là 1 hoặc 2Tạo tất cả các hoán vị có thể (hoặc n-tuples)

2*2*2*2*2*2*2*2*2*2 = 1024 # possible 

1,1,1,1,1,1,1,1,1,1 
1,2,1,1,1,1,1,1,1,1 
1,2,2,1,1,1,1,1,1,1 
1,2,2,2,1,1,1,1,1,1 
... 

Có một "nhanh" cách để làm điều này trong R?

+2

Có một 'chức năng permutations' trong gregmisc Tôi tin. Bạn có thể ép buộc ma trận kết quả thành một data.frame. –

+1

Hoặc 'combn' trong' cơ số', kết hợp với 'duy nhất (x, MARGIN = 2)'. – jbaums

+1

Không phải hoán vị. [Permutations] (https://en.wikipedia.org/wiki/Permutation) là sắp xếp lại các đối tượng. Bạn không thể sắp xếp lại '1,1,1,1,1,1,1,1,1,1' thành' 1,2,1,1,1,1,1,1,1,1', bởi vì chuỗi không có bất kỳ '2'. – liori

Trả lời

28

thế nào về điều này:

tmp = expand.grid(1:2,1:2,1:2,1:2,1:2,1:2,1:2,1:2,1:2,1:2) 

hay này (nhờ Tyler):

x <- list(1:2) 
tmp = expand.grid(rep(x, 10)) 
+1

'nrow (duy nhất (tmp))' = 1024. Cảm ơn vì điều đó. –

+17

Để nhập ít mã bạn có thể sử dụng: 'x <- list (1: 2);' 'tmp = expand.grid (rep (x, 10))' –

+0

Điều cần biết; cảm ơn. –

Các vấn đề liên quan