在R中的复制/折叠功能

36

我对粘贴功能感到困惑,我以为它只是简单的连接操作。

whales <- c("C","D","C","D","D")

quails <- c("D","D","D","D","D")

results <-paste(whales, quails, collapse = '')
为什么这段代码的输出是 "C DD DC DD DD D" 而不是 CD DD CD DD DD?
此外,为什么会出现这种情况?
results <-paste(whales[1], quails[1], collapse = '')

返回

“C D”?

带有一个空格吗?

谢谢, D

编辑

好的,我明白了

results <-paste(whales, quails, collapse = NULL, sep='')

我希望你能给我想要的东西,但能否解释为什么之前的代码不起作用呢?同时感谢回答者。


9
为什么会有踩的投票?这是一个合理的问题,而且表达得也很清楚。 - Kamran Bigdely
2个回答

64

对于那些喜欢图形展示的人,这是我在解释 R 中如何使用 paste 的方式:

enter image description here

sep 函数创建元素智能三明治,夹在 sep 参数值之间:

enter image description here

collapse 函数创建一个由使用 sep 参数生成的三明治之间添加了 collapse 参数值的大型三明治:

enter image description here


5
好的视觉效果展现了简单的概念,这些图形是你用 R 创建的吗?怎样做的? - Dr Nisha Arora
@DrNishaArora,我使用PowerPoint创建了这些插图。 - Ashirwad
是的,我们可以在PowerPoint中制作出精美的图像和动画。我对在R中制作这些产生了好奇心。 - Dr Nisha Arora
@DrNishaArora,可能有一种方法,但我不熟悉我们如何做到这一点! - Ashirwad

34

对于第一个问题,请尝试以下方法(这可能比选择重复2个字符更具说明性)。

### Note that R paste's together corresponding elements together...
paste(c("A", "S", "D", "F"), 
      c("W", "X", "Y", "Z"))

[1] "A W" "S X" "D Y" "F Z"

### Note that with collapse, R converts the above 
  # result into a length 1 character vector.
paste(c("A", "S", "D", "F"), 
      c("W", "X", "Y", "Z"), collapse = '')

[1] "A WS XD YF Z"

你真正想做的(为了获得“期望”的结果)是以下操作:

### "Desired" result:
paste(whales, quails, sep = '', collapse = ' ')

[1] "CD DD CD DD DD"
请注意,我们正在将sepcollapse参数指定为不同的值,这与您的第二个问题有关。 sep允许每个项目用字符串分隔,而collapse则允许整个结果用字符串分隔。
尝试一下。
paste(whales, quails, collapse = '', sep = '')

[1] "CDDDCDDDDD"

或者,可以使用一个快捷方式paste0,它默认为paste,其分隔符为sep =''

paste0(whales, quails, collapse = '')

我仍然没有找到为什么paste(c("A", "S", "D", "F"), c("W", "X", "Y", "Z"), collapse = '')的结果是这样的答案。在我的尝试中,我也得出了结论,为了获得所需的输出,我们需要使用sep = ""或者使用paste0()。但是我仍然无法理解上述代码的行为。 - Dr Nisha Arora

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接