独特的字符串组合

5
我有一个向量,其中包含特定的单词。
colors<-c("Yellow","Blue","Red")

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

现在我想创建一个新变量,colorsCombined,其中包含原始向量和所有可能的单词组合。
> colorsCombined
[1] "Yellow", "Blue", "Red", "YellowBlue", "YellowRed", "BlueRed", "YellowBlueRed"

我认为黄蓝和蓝黄是相同的。如何实现呢?
1个回答

10

一个选择是在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"

说明(按要求)

基本上,原帖想要一个包含所有可能组合(不是排列)的向量,取决于输入向量的长度。因此,我们应该在k < - 1:length(x)上运行combn函数,并为每个k生成所有组合。

所以当k == 1 时,它只是原始向量,所以我们可以跳过那部分,只需使用c连接原始向量。其余生成的组合返回不同长度的向量列表(以明显的原因按降序排列),因此我们需要在c函数中使用recursive = TRUE来模仿unlist的行为,并将结果组合成单个向量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接