2015-04-01 175 views
4

我有一個包含特定單詞唯一字符串組合

colors<-c("Yellow","Blue","Red") 

> colors 
[1] "Yellow" "Blue" "Red" 

現在我想創建一個新的變量向量, colorsCombined,其中原始載體存在,並且這些詞所有可能的組合。

> colorsCombined 
[1] "Yellow", "Blue", "Red", "YellowBlue", "YellowRed", "BlueRed", "YellowBlueRed" 

我認爲YellowBlue和BlueYellow一樣。

我該怎麼做?

回答

7

一個選項是在lapply循環中運行combn函數。你可以將它定義爲自己的函數

allCombs <- function(x) c(x, lapply(seq_along(x)[-1L], 
          function(y) combn(x, y, paste0, collapse = "")), 
          recursive = TRUE) 

allCombs(colors) 
## [1] "Yellow" "Blue" "Red" "YellowBlue" "YellowRed" "BlueRed" "YellowBlueRed" 

說明(每個請求)

基本上OP要取決於輸入向量的長度的所有可能的組合(排列)的載體。因此,我們應該在k <- 1:length(x)上運行combn函數,併爲每個k生成所有組合。 因此,當k == 1,它只是原始矢量,所以我們可以跳過這一部分,並使用c連接原始矢量。剩下的生成組合返回一個不同長度的向量列表(由於顯而易見的原因按降序排列),因此我們需要在c函數中使用recursive = TRUE以模仿unlist的行爲並將結果組合成單個向量。

+1

謝謝。完美的作品! – 2015-04-01 10:04:01

+2

請解釋這是如何工作的,我不明白嗎? – smci 2015-04-01 10:11:57

+1

@smci補充說明,希望現在更清楚。 – 2015-04-01 10:26:27