我正在尝试生成一个单个变量,它是两个字符串联,例如从“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)
答案 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))
顾名思义,捕获字符串中的输出以返回所需的结果。但是,这是不是首选方法,只是通过替代解决方案的解释。