【问题标题】:Generate all combinations (and their sum) of a vector of characters in R生成R中字符向量的所有组合(及其总和)
【发布时间】:2019-10-10 09:53:03
【问题描述】:

假设我有一个长度为n 的向量,我需要生成所有可能的组合及其总和。例如:

如果n=3,我们有:

myVec <- c("a", "b", "c")

Output = 
"a"
"b"
"c"
"a+b"
"a+c"
"b+c"
"a+b+c"

注意我们认为a+b = b+a,所以只需要保留一个。

另一个例子如果n=4

myVec <- c("a", "b", "c", "d")

Output:
"a"
"b"
"c"
"d"
"a+b"
"a+c"
"a+d"
"b+c"
"b+d"
"c+d"
"a+b+c"
"a+c+d"
"b+c+d"
"a+b+c+d"

【问题讨论】:

    标签: r combinations


    【解决方案1】:

    我们可以在combn中使用不同长度的sapply,并使用paste作为函数来应用。

    sapply(seq_along(myVec), function(n) combn(myVec, n, paste, collapse = "+"))
    
    #[[1]]
    #[1] "a" "b" "c"
    
    #[[2]]
    #[1] "a+b" "a+c" "b+c"
    
    #[[3]]
    #[1] "a+b+c"
    
    
    myVec <- c("a", "b", "c", "d")
    sapply(seq_along(myVec), function(n) combn(myVec, n, paste, collapse = "+"))
    
    #[[1]]
    #[1] "a" "b" "c" "d"
    
    #[[2]]
    #[1] "a+b" "a+c" "a+d" "b+c" "b+d" "c+d"
    
    #[[3]]
    #[1] "a+b+c" "a+b+d" "a+c+d" "b+c+d"
    
    #[[4]]
    #[1] "a+b+c+d"
    

    如果我们需要输出为单个向量,我们可以unlist

    【讨论】:

    • 谢谢!很高兴看到一个简单而有效的解决方案!
    猜你喜欢
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多