R: Jak mogę połączyć wektor? [duplikat]

To pytanie ma już odpowiedź tutaj:

Próbuję wytworzyć jedną zmienną, która jest połączeniem dwóch znaków, np. przejść z "p30s4" "p28s4"do" p30s4 p28s4". Próbowałem cat i wklej, jak pokazano poniżej. Obie zwracają puste zmienne. Co robię źle?

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

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

> foo = paste(cat(blah))
p30s4 p28s4
> foo
character(0)
Author: John , 2010-05-02

4 answers

Spróbuj użyć:

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

Lub jeśli chcesz spację pomiędzy:

> paste(blah, collapse = " ")
[1] "p30s4 p28s4"
 56
Author: shuttle87,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-02 03:35:38

Alternatywą dla argumentu 'collapse' paste () jest użycie do.call() przekazuje każdą wartość w wektorze jako argument.

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

Zaletą tego podejścia jest to, że można go uogólnić do funkcji innych niż'wklejanie'.

 10
Author: wkmor1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-02 08:16:43

Odpowiedzi na to pytanie są świetne i dużo prostsze niż moje - więc od tego czasu przyjęłam użycie 'collapse'.

Jednak, aby promować ideę, że w razie wątpliwości można napisać własną funkcję, przedstawiam moje poprzednie, mniej eleganckie rozwiązanie:

  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)

Możesz też dodawać cudzysłowy i przecinki, lub po prostu cokolwiek - to jest oryginalna wersja, którą napisałem:

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
}
 2
Author: David LeBauer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-05 15:55:15

Problem z używaniem cat powyżej polega na tym, że cat(x) zapisuje x do wyjścia, a nie do zmiennej. Jeśli chcesz napisać do Ciągu, możesz to zrobić:

capture.output(cat(blah))

Który, jak sama nazwa wskazuje, przechwytuje wynik w łańcuchu, aby zwrócić pożądany wynik. Jednak jest to nie preferowana metoda, tylko Wyjaśnienie za pomocą alternatywnego rozwiązania.

 1
Author: C8H10N4O2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-18 21:05:27