Вставить/свернуть в R

Я смущен вставкой и думал, что это просто конкатенация.

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

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

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

Почему бы это вернуть "DD DD DD DD" вместо DD DD DD DD?

Более того, почему

results <-paste(whales[1], quails[1], collapse = '')

возврат

"C D"?

с пространством?

Спасибо, D

ИЗМЕНИТЬ

Хорошо, я вижу, что

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

получит мне то, что я хочу, но объяснение, почему предыдущий код не работал? А также благодарю вас за ответчиков.

Ответ 1

Для первого вопроса попробуйте следующее (что может быть более наглядным, чем выбор повторения двух символов).

### Note that R paste 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"

Обратите внимание, что мы указываем аргументы sep и collapse для разных значений, которые относятся к вашему второму вопросу. sep позволяет каждому термину быть разделенным символьной строкой, тогда как collapse позволяет весь результат разделяться символьной строкой.

Try

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

[1] "CDDDCDDDDD"

В качестве альтернативы используйте ярлык paste0, который по умолчанию равен paste с sep = ''

paste0(whales, quails, collapse = '')

Ответ 2

Для тех, кто любит визуальные эффекты, вот мое объяснение того, как работает paste в R:

enter image description here

sep создает поэлементный сэндвич, наполненный значением в аргументе sep:

enter image description here

collapse создает ОДИН большой сэндвич со значением аргумента collapse, добавляемого между бутербродами, полученными с использованием аргумента sep:

enter image description here