R中向量中的字符相乘

R中向量中的字符相乘,r,function,loops,character,combinations,R,Function,Loops,Character,Combinations,假设我有向量: x = c("a","b","c") 我想创建一个返回以下内容的函数: [1] "a*b" "a*c" "b*c" 我假设我们将使用paste0()函数或使用某种for循环来循环向量中的字符,但我不完全确定如何执行此操作。为了澄清,我正在寻找一个输出,它一次从向量中提取两个字符,并使用某种paste0(…,sep=“*”)来获得上面所需的输出。我不想一次乘以向量中的所有字符,一次只乘以两个字符 我们可以使用combnfrombase R combn(x, 2, FUN = p

假设我有向量:

x = c("a","b","c")
我想创建一个返回以下内容的函数:

[1] "a*b" "a*c" "b*c"

我假设我们将使用paste0()函数或使用某种for循环来循环向量中的字符,但我不完全确定如何执行此操作。为了澄清,我正在寻找一个输出,它一次从向量中提取两个字符,并使用某种paste0(…,sep=“*”)来获得上面所需的输出。我不想一次乘以向量中的所有字符,一次只乘以两个字符

我们可以使用
combn
from
base R

combn(x, 2, FUN = paste, collapse="*")
#[1] "a*b" "a*c" "b*c"

您可以使用一个可能更快的递归函数

foo = function(x, sep = "*") {
    if (length(x) < 2) {
        return(x)
    }

    ans = paste(x[1], x[-1], sep = sep)

    if (length(x) > 2) {
        ans = c(ans, Recall(x[-1]))
    }

    return(ans)
}

foo(c("a", "b", "c"))
#[1] "a*b" "a*c" "b*c"
foo=函数(x,sep=“*”){
if(长度(x)<2){
返回(x)
}
ans=粘贴(x[1],x[-1],sep=sep)
如果(长度(x)>2){
ans=c(ans,召回(x[-1]))
}
返回(ans)
}
foo(c(“a”、“b”、“c”))
#[1] “a*b”“a*c”“b*c”

很好,这回答了我的问题。谢谢