独特的字符串组合

Unique string combinations

我有一个包含特定单词的向量

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

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

现在我想创建一个新变量,colorsCombined,其中存在原始向量以及这些词的所有可能组合。

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

我认为 YellowBlue 与 BlueYellow 相同。

我该怎么做?

一个选项是 运行 combn 函数在 lapply 循环中。你可以定义为你自己的函数

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 需要一个包含所有可能组合( 而不是 排列)的向量,具体取决于输入向量的长度。因此,我们应该 运行 combn 函数覆盖 k <- 1:length(x) 并为每个 k 生成所有组合。 所以当 k == 1 时,它只是原始向量,所以我们可以跳过那部分,只使用 c 连接原始向量。其余生成的组合 return 具有不同长度的向量列表(出于明显的原因按降序排列),因此我们需要在 c 函数中使用 recursive = TRUE 以模仿unlist 的行为并将结果组合成一个向量。