2011-11-12 45 views
5

我不確定排列是否正確。我想給定一組n個向量的(即[1,2][3,4][2,3])置換所有這些,得到的R中多個向量的組合

[1,3,2],[1,3,3],[1,4,2],[1,4,3],[2,3,2] etc. 

輸出有R中的操作,將做到這一點?

+0

我相信你是描述組合。排列與組合類似,但排列的順序很重要。 – Andrie

回答

9

這是在列表中存儲的載體,並使用do.call()到一個合適的函數調用爲您安排一個有用的情況。 expand.grid()是您想要的標準功能。但是,這樣你就不必鍵入出或個人命名的載體,嘗試:

> l <- list(a = 1:2, b = 3:4, c = 2:3) 
> do.call(expand.grid, l) 
    a b c 
1 1 3 2 
2 2 3 2 
3 1 4 2 
4 2 4 2 
5 1 3 3 
6 2 3 3 
7 1 4 3 
8 2 4 3 

然而,我所有的聰明,事實證明,expand.grid()接受一個列表:

> expand.grid(l) 
    a b c 
1 1 3 2 
2 2 3 2 
3 1 4 2 
4 2 4 2 
5 1 3 3 
6 2 3 3 
7 1 4 3 
8 2 4 3 
+0

+1爆炸和詛咒。你偷了我的答案。 ;-) – Andrie

+0

@Andrie多麼尷尬!試圖成爲聰明的人有它的優勢。雖然我不配得到這裏的接受。我會補充一些upvotes。 –

7

這就是expand.grid所做的。

從幫助頁面引用:從提供的矢量或因子的所有組合創建數據框。結果是一個data.frame,每個組合都有一行。

expand.grid(
    c(1, 2), 
    c(3, 4), 
    c(2, 3) 
) 

    Var1 Var2 Var3 
1 1 3 2 
2 2 3 2 
3 1 4 2 
4 2 4 2 
5 1 3 3 
6 2 3 3 
7 1 4 3 
8 2 4 3 
+0

+1爆炸和詛咒,你打敗了我;-) –

+0

嗨,我正在嘗試這種方法,但得到的消息:「錯誤rep.int(rep.int(seq_len(nx),rep.int( rep.fac,nx)),orep): 矢量太大「有沒有其他方法可以做到這一點? – user1375871

+0

@ user1375871你的矢量有多大? –