【问题标题】:How can I concatenate a vector? [duplicate]如何连接向量? [复制]
【发布时间】:2011-02-14 16:34:15
【问题描述】:

我正在尝试生成一个变量,它是两个字符的串联,例如从“p30s4”“p28s4”到“p30s4 p28s4”。我试过 cat and paste ,如下所示。两者都返回空变量。我做错了什么?

> blah = c("p30s4","p28s4")
> blah
[1] "p30s4" "p28s4"

> foo = cat(blah)
p30s4 p28s4
> foo
NULL

> foo = paste(cat(blah))
p30s4 p28s4
> foo
character(0)

【问题讨论】:

  • 您正在连接一个向量,可能想更改问题,但答案仍然正确

标签: r vector concatenation


【解决方案1】:

尝试使用:

> paste(blah, collapse = "")
[1] "p30s4p28s4"

或者如果你想要两者之间的空间:

> paste(blah, collapse = " ")
[1] "p30s4 p28s4"

【讨论】:

    【解决方案2】:

    paste() 的 'collapse' 参数的替代方法是使用 do.call() 将向量中的每个值作为参数传递。

    do.call(paste,as.list(blah))
    

    优点是这种方法可以推广到“粘贴”以外的功能。

    【讨论】:

    • as.list(blah) 成功了
    【解决方案3】:

    这个问题的答案很好,而且比我的简单得多 - 所以我后来采用了“折叠”的用法。

    但是,为了宣传在有疑问时可以编写自己的函数的想法,我提出了我以前的不太优雅的解决方案:

      vecpaste <- function (x) {
         y <- x[1]
         if (length(x) > 1) {
             for (i in 2:length(x)) {
                 history
                 y <- paste(y, x[i], sep = "")
             }
         }
         #y <- paste(y, "'", sep = "")
         y
     }
    
    vecpaste(blah)
    

    你也可以添加引号和逗号,或者任何东西——这是我写的原始版本:

    vecpaste <- function (x) {
    y <- paste("'", x[1], sep = "")
    if (length(x) > 1) {
        for (i in 2:length(x)) {
            history
            y <- paste(y, x[i], sep = "")
        }
    }
    y <- paste(y, "'", sep = "")
    y
    }
    

    【讨论】:

      【解决方案4】:

      上面使用cat 的问题是cat(x)x 写入输出,而不是变量。如果你想写入一个字符串,你可以这样做:

      capture.output(cat(blah))
      

      顾名思义,捕获字符串中的输出以返回所需的结果。但是,这不是首选方法,只是作为替代解决方案的一种解释。

      【讨论】:

        猜你喜欢
        • 2016-12-26
        • 1970-01-01
        • 2021-10-20
        • 2013-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-12
        • 2014-10-30
        相关资源
        最近更新 更多