Spojování řetězců
Popis
Spojuje (mezi vektory) a následně slučuje (uvnitř vektoru) (též zřetězuje, konkatenuje) prvky vektorů po jejich (případné) konverzi na datový typ character (textové řetězce).
Použití
paste (..., sep = " ", collapse = NULL)
paste0(..., collapse = NULL)
Argumenty
... | jeden nebo více R objektů pro konverzi na vektory typu character . |
sep | textový řetězec pro oddělení položek (mezi vektory). Nesmí být NA . |
collapse | volitelný textový řetězec pro oddělení výsledků (mezi prvky vektoru). Nesmí být NA . |
Podrobnosti
Funkce paste převede své argumenty (pomocí funkce as.character ) na textové vektory a spojí jejich prvky (případně je oddělí za pomoci oddělovače zadaného v argumentu sep ). Pokud jsou argumenty funkce vektory, jsou spojeny po prvcích a výsledkem je vektor typu character . Pokud se délka vstupních vektorů liší, jsou dle potřeby opakovány (recyklovány), přičemž argumenty nulové délky se mění na "".
Za povšimnutí stojí, že funkce paste() mění NA_character_ (chybějící textovou hodnotu) na "NA" , což na první pohled může vypadat neprakticky, např. při spojování dvou textových řetězců, nebo naopak nanejvýš prakticky, např. ve funkci paste("the value of p is ", p) .
paste0(..., collapse) je ekvivalentní s paste(..., sep = "", collapse) , s mírně vyšší efektivitou.
Pokud je specifikována hodnota argumentu collapse , (spojené) hodnoty ve výsledku jsou ve druhém kroku sloučeny do jediného řetězce a původní prvky jsou odděleny právě hodnotou (znakem) tohoto argumentu.
Hodnota
Vektor spojených hodnot typu character . Výsledný vektor bude délky 0 v případě, že jsou délky 0 všechny argumenty, kromě případu, kdy argument collapse není NULL - v takovém případě je výsledným vektorem prázdný textový řetězec.
Pokud je kterýkoliv vstup do některého prvku výsledku v kódování UTF-8 (a současně žádný vstup do stejného prvku není v kódování "bytes" (viz Encoding ), bude tento prvek v kódování UTF-8. V ostatních případech je výstup v aktuálním kódování a v takovém případě je kódování prvku deklarováno pokud současné národní prostředí(locale) je buď Latin-1 nebo UTF-8, nejméně jeden z odpovídajících vstupů (včetně oddělovačů) má deklarováno kódování a všechny vstupy jsou buď ASCII nebo deklarovány.
Pokud je libovolný vstup do některého prvku výstupu deklarován s kódováním "bytes" , neprovádí se překlad žádného prvku a výsledný prvek výstupu je opět v kódování "bytes" . Pokud argument collapse není NULL, vztahuje se toto pravidlo také na druhou fázi slučování prvků uvnitř vektoru (collapsing), nicméně tentokrát může k překladu dojít již při spojování prvků mezi řetězci v první fázi.
Reference
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
Viz také
toString typicky volá funkci paste(*, collapse=", ") . Manipulace s řetězci také pomocí funkcí as.character , substr , nchar , strsplit ; dále, cat , která slučuje prvky a zapisuje je do souboru a sprintf pro konstrukce řetězců ve stylu C.
plotmath pro použití funkce paste v popiscích grafů.
Příklady
## Pokud je vstupem jediny vektor, funkce paste0 a paste funguji jako as.character.
paste0(1:12)
paste(1:12) # totez
as.character(1:12) # totez
## Pokud je vstupem paste0 vic vektoru, jsou zretezeny ve vektorove podobe
(nth <- paste0(1:12, c("st", "nd", "rd", rep("th", 9))))
## paste funguje stejne, ale oddeluje ve vysledku vstupy mezerou.
## Vsimnete si, ze recyklacni pravidlo upravi vsechny vstupy podle delky nejdelsiho z nich.
paste(month.abb, "is the", nth, "month of the year.")
paste(month.abb, letters)
## Oddelovac je mozne definovat zmenou argumentu sep, ktery muze byt reprezentovan i vice znaky.
paste(month.abb, "is the", nth, "month of the year.", sep = "_*_")
## Pro slouceni vystupu do jedineho retezce zadejte hodnotu argumentu collapse.
paste0(nth, collapse = ", ")
## Pro vstupy delky 1 pouzijte argument sep namisto collapse
paste("1st", "2nd", "3rd", collapse = ", ") # toto patrne neni pozadovany vystup
paste("1st", "2nd", "3rd", sep = ", ")
## Argumenty sep a collapse lze kombinovat dohromady.
paste(month.abb, nth, sep = ": ", collapse = "; ")
## Uzitecne muze byt pouziti paste() v kombinaci s strwrap().
## Pro praci s dlouhymi retezci.
(title <- paste(strwrap(
"Stopping distance of cars (ft) vs. speed (mph) from Ezekiel (1930)",
width = 30), collapse = "\n"))
plot(dist ~ speed, cars, main = title)
|