你能告诉我为什么
paste(paste(c("first", "second"), collapse=", "), "third", collapse=" and ")
给了我
"first, second third"
而不是
"first, second and third"
?获得第二个输出的正确语法是什么?
答案 0 :(得分:7)
这是你调用函数的一个细微差别。在
paste(c("first", "second"), collapse = ", ")
请注意,您只通过...
传递一个参数,这是一个长度为2的向量。这会导致返回长度为1的向量:
> paste(c("first", "second"), collapse = ", ")
[1] "first, second"
然后通过外部...
中的paste()
传递此长度1向量和第二长度1向量。实际上你正在做:
paste("first, second", "third", collapse = " and ")
由于两个提供的向量都是长度为1,因此没有任何内容可以折叠,这两个字符串只是与分隔符sep
连接在一起。
因此,在第一种情况下,
paste(c("first", "second"), collapse = ", ")
没有第二个向量将值粘贴到第一个向量上,因此paste()
使用c("first", "second")
作为分隔符折叠单个向量", "
的元素。但是当你传入两个长度为1的向量时,在
paste("first, second", "third", collapse = " and ")
该函数使用"first, second third"
将两个字符串连接成一个字符串sep
,然后因为只有一个长度为1个字符,所以没有任何内容可以折叠。
如果你想要的只是字符串"first, second, and third"
并且根据你的例子你有输入,那么只需切换到使用sep = ", and "
:
paste(paste(c("first", "second"), collapse=", "), "third", sep = ", and ")
给出了
> paste(paste(c("first", "second"), collapse=", "), "third", sep = ", and ")
[1] "first, second, and third"
或
> paste(paste(c("first", "second"), collapse=", "), "third", sep = " and ")
[1] "first, second and third"
如果您不想要牛津逗号。
查看sep
和collapse
与提供的输入的关系的最简单方法。两个例子是说明性的:
> paste(1:5, letters[1:5], LETTERS[1:5], sep = " ")
[1] "1 a A" "2 b B" "3 c C" "4 d D" "5 e E"
> paste(1:5, letters[1:5], LETTERS[1:5], sep = " ", collapse = "-")
[1] "1 a A-2 b B-3 c C-4 d D-5 e E"
我们观察到两个特征:
sep
以元素方式应用于输入向量,例如到1
,a
和A
;然后是2
,b
和B
;等等。collapse
适用于使用sep
的第一个粘贴步骤的结果,如果通过将元素与给定的分隔符连接而得到长度为> = 2的向量通过论证collapse
。如果没有collapse
,paste()
可以返回多个字符串的向量,如果给定向量输入,但指定collapse
时,将仅返回长度为1的字符向量。答案 1 :(得分:1)
或使用:
paste(paste(c("first", "second"), collapse=", "), "third", sep=", and ")
## "first, second, and third"
请参阅这篇关于粘贴的博文:http://trinkerrstuff.wordpress.com/2013/09/15/paste-paste0-and-sprintf-2/
答案 2 :(得分:1)
让我们分解一下:
第一部分:
> paste(c("first", "second"), collapse=", ")
#[1] "first, second"
第二部分:
> paste("first, second", "third", collapse=" and ")
#[1] "first, second third"
使用sep =而不是collapse =
> paste("first, second","third",sep=" and ")
#[1] "first, second and third"
因此您可以使用:
> paste(paste(c("first", "second"), collapse=", "), "third",sep=", and ")
#[1] "first, second, and third"