2017-06-08 43 views
0

什麼R命令生成長度爲k的所有可能的有序組合?生成有序組合的函數

例如從這個載體:

a,b,c,d 

它要產生如該命令是保守的長度爲3的所有組合,但只有那些者:

a,b,c 
a,b,d 
a,c,d 
b,c,d 

或者如果我有這樣的載體

a,b,7,d,e 

我想對長度2做同樣的事情:

因爲它可以讓你所有可能的組合,包括逆轉的,如
ç
a,b 
a,7 
a,d 
a,e 
b,7 
b,d 
b,e 
7,d 
7,e 
d,e 

combn這裏行不通,B
在簡單的情況下,我可以嘗試用expand.grid做到這一點,但是這兩種方法將需要進一步處理。
也許有一個基本功能(或軟件包)能夠做我想做的甚至接受更復雜的條件。

PD:當我說「有序」時,我正在談論出現在起始向量中的順序。我不是指排版順序,儘管在我的例子中它們是相同的。

+2

如果我做' combn(x,3,FUN = toString)'它給出預期的輸出 - 其中'x < - letters [1:4]' – Sotos

+0

另外,這個https://stackoverflow.com/questions/21984830/creating-new-ids-two-way-from-two-vectors可能會對你的問題感興趣。 – nadizan

回答

1

可以在基礎R使用combn

vec <- c("a", "b", "c", "d") 
len <- 2 
combn(length(vec), len, function(x) vec[x]) 

# [,1] [,2] [,3] [,4] [,5] [,6] 
#[1,] "a" "a" "a" "b" "b" "c" 
#[2,] "b" "c" "d" "c" "d" "d" 

長度3作者:

combn(length(vec), 3, function(x) vec[x]) 

#  [,1] [,2] [,3] [,4] 
#[1,] "a" "a" "a" "b" 
#[2,] "b" "b" "c" "c" 
#[3,] "c" "d" "d" "d" 

OR爲@Sotos在評論中指出:

combn(vec, len) 
+3

'combn(vec,2)'給出完全相同的輸出 – Sotos