Подтвердить что ты не робот

R: как я могу конкатенировать вектор?

Я пытаюсь создать единую переменную, которая представляет собой конкатенацию двух символов, например, для перехода с "p30s4" "p28s4" на "p30s4 p28s4". Я пробовал кошку и вставлял, как показано ниже. Оба возвращают пустые переменные. Что я делаю неправильно?

> blah = c("p30s4","p28s4")
> blah
[1] "p30s4" "p28s4"

> foo = cat(blah)
p30s4 p28s4
> foo
NULL

> foo = paste(cat(blah))
p30s4 p28s4
> foo
character(0)
4b9b3361

Ответ 1

Попробуйте использовать:

> paste(blah, collapse = "")
[1] "p30s4p28s4"

или если вы хотите промежуток между ними:

> paste(blah, collapse = " ")
[1] "p30s4 p28s4"

Ответ 2

Альтернативой аргументу 'collapse' метода paste() является использование do.call() для передачи каждого значения в векторе в качестве аргумента.

do.call(paste,as.list(blah))

Преимущество заключается в том, что этот подход обобщается на функции, отличные от "вставки".

Ответ 3

Ответы на этот вопрос велики и намного проще, чем у меня - поэтому с тех пор я принял использование "краха".

Однако, чтобы продвинуть идею, что, когда вы сомневаетесь, вы можете написать свою собственную функцию, я представляю свое предыдущее, менее элегантное решение:

  vecpaste <- function (x) {
     y <- x[1]
     if (length(x) > 1) {
         for (i in 2:length(x)) {
             history
             y <- paste(y, x[i], sep = "")
         }
     }
     #y <- paste(y, "'", sep = "")
     y
 }

vecpaste(blah)

вы также можете добавить кавычки и запятые или что угодно - это оригинальная версия, которую я написал:

vecpaste <- function (x) {
y <- paste("'", x[1], sep = "")
if (length(x) > 1) {
    for (i in 2:length(x)) {
        history
        y <- paste(y, x[i], sep = "")
    }
}
y <- paste(y, "'", sep = "")
y
}

Ответ 4

Проблема с использованием cat выше заключается в том, что cat(x) записывает x для вывода, а не в переменную. Если вы хотите написать строку, вы можете сделать:

capture.output(cat(blah))

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