R: Jak mogę połączyć wektor? [duplikat]
To pytanie ma już odpowiedź tutaj:
- konkatenacja wektora łańcuchów / znaków 5 odpowiedzi
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)
4 answers
Spróbuj użyć:
> paste(blah, collapse = "")
[1] "p30s4p28s4"
Lub jeśli chcesz spację pomiędzy:
> paste(blah, collapse = " ")
[1] "p30s4 p28s4"
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'.
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
}
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.
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