2013-08-27 5 views
8

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

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

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

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

Зачем это возвращать «C DD DD DD DD» вместо CD DD CD DD DD?

Кроме того, почему бы

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

возвращение

"C D"?

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

Спасибо, D

EDIT

ОК, я вижу, что

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

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

+5

Почему вниз голосов? Это законный вопрос, а также хорошо сформулированный. –

ответ

20

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

### 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" 

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

Попробуйте

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

[1] "CDDDCDDDDD" 

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

paste0(whales, quails, collapse = '') 
Смежные вопросы