如何连接矢量?

时间:2010-05-02 03:16:31

标签: r vector concatenation

我正在尝试生成一个单个变量,它是两个字符串联,例如从“p30s4”“p28s4”变为“p30s4 p28s4”。我尝试了猫和粘贴,如下所示。两者都返回空变量。我做错了什么?

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

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

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

4 个答案:

答案 0 :(得分:58)

尝试使用:

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

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

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

答案 1 :(得分:10)

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

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

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

答案 2 :(得分:2)

这个问题的答案很好,比我的简单得多 - 所以我从那时起就采用了'崩溃'。

然而,为了宣传这样的想法,即如果有疑问,你可以编写自己的功能,我会提出我以前不那么优雅的解决方案:

  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
}

答案 3 :(得分:1)

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

capture.output(cat(blah))

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