2015-04-01 173 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