在R中粘贴/折叠

DSG*_*DSG 14 r concatenation paste

我很困惑粘贴,并认为这只是简单的连接.

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

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

results <-paste(whales, quails, collapse = '')
Run Code Online (Sandbox Code Playgroud)

为什么这将返回"C DD DC DD DD D"而不是CD DD CD DD DD?

而且,为什么会这样

results <-paste(whales[1], quails[1], collapse = '')
Run Code Online (Sandbox Code Playgroud)

返回

"C D"?

有空间吗?

感谢:D

编辑

好的,我明白了

results <-paste(whales, quails, collapse = NULL, sep='')
Run Code Online (Sandbox Code Playgroud)

会得到我想要的,但解释为什么以前的代码不起作用?还要感谢回答者.

Ash*_*wad 29

对于那些喜欢视觉效果的人,这里是我解释如何paste工作的看法R

在此处输入图片说明

sep创建填充有sep参数值的逐元素三明治:

在此处输入图片说明

collapse创建一个大三明治,并在collapse使用sep参数生成的三明治之间添加参数值:

在此处输入图片说明

  • 一个简单概念的漂亮视觉效果,是您在 R 中创建的吗?如何? (5认同)

And*_*eas 23

对于第一个问题,请尝试以下方法(这可能比选择重复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"
Run Code Online (Sandbox Code Playgroud)

您真正想要做的是(获得"期望的"结果)如下:

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

[1] "CD DD CD DD DD"
Run Code Online (Sandbox Code Playgroud)

请注意,我们正在为不同的值指定sepcollapse参数,这与您的第二个问题有关.sep允许每个术语由字符串分隔,而collapse允许整个结果由字符串分隔.

尝试

paste(whales, quails, collapse = '', sep = '')

[1] "CDDDCDDDDD"
Run Code Online (Sandbox Code Playgroud)

可替代地,使用快捷方式paste0,其默认为pastesep = ''

paste0(whales, quails, collapse = '')
Run Code Online (Sandbox Code Playgroud)