8.1 Řetězce v R
R ukládá řetězce ve vektorech datového typu character
.
8.1.1 Zadávání řetězců
Řetězec se zadává mezi dvěma uvozovkami nebo dvěma apostrofy (nejde je míchat, ale je možné uzavřít apostrof mezi uvozovky nebo naopak):
"Petr řekl: 'Už tě nemiluji.'"
'Agáta odpověděla: "Koho to zajímá?"'
Řetězce mohou v R obsahovat speciální znaky jako např. "\n"
(konec řádku), "\t"
(tabelátor) apod. Uvozovky je také možné zbavit jejich speciálního významu tak, že jim předřadíte zpětné lomítko. To slouží nejen k zadávání speciálních znaků, ale i k escapování speciálních znaků, které pak mají svůj doslovný význam. Pokud chcete v řetězci zadat zpětné lomítko, musíte je escapovat (tj. zdvojit); pokud chcete zadat uvozovky v řetězci ohraničeném uvozovkami, musíte je také escapovat zpětným lomítkem:
s <- "Petr na to odvětil: \"Je to proto, že vypadáš jako \\.\""
8.1.2 Tisk řetězců
Funkce print()
, která se používá při implicitním vypsání obsahu proměnné, vypisuje na začátku řetězců uvozovky a všechny speciální a escapované znaky vypisuje se zpětnými lomítky. Pokud chcete vypsat řetězec “normálně”, můžete použít funkci cat()
:
print(s)
## [1] "Petr na to odvětil: \"Je to proto, že vypadáš jako \\.\""
cat(s)
## Petr na to odvětil: "Je to proto, že vypadáš jako \."
Funkce, které slouží k tisku řetězců zahrnují:
funkce | účel |
---|---|
print() |
generická funkce pro tisk objektů |
noquote() |
tisk bez uvozovek |
cat() |
tisk obsahu řetězců; spojuje více řetězců |
format() |
formátování proměnných před tiskem |
toString() |
konverze na řetězec |
sprintf() |
formátování řetězců ve stylu jazyka C |
Podívejte se na tyto funkce a jejich parametry do nápovědy.
8.1.3 Prázdné řetězce a vektory řetězců
Je potřeba rozlišovat mezi prázdnými řetězci (tj. řetězcem ""
) a prázdným vektorem řetězců:
s1 <- "" # vektor délky 1 obsahující prázdný řetězec
length(s1)
## [1] 1
s2 <- character(0) # vektor typu character, který má nulovou délku,
length(s2) # tj. neobsahuje žádné řetězce
## [1] 0
s3 <- character(5) # vektor pěti prázdných řetězců
length(s3)
## [1] 5
s3
## [1] "" "" "" "" ""
Všimněte si, že funkce length()
vrací délku vektoru, ne délku řetězce, který vektor snad obsahuje.
8.1.4 Vektory písmen ASCII
R má dva speciální vektory, které obsahují písmena ASCII abecedy:
letters # malá písmena anglické abecedy
## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q"
## [18] "r" "s" "t" "u" "v" "w" "x" "y" "z"
LETTERS # velká písmena anglické abecedy
## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q"
## [18] "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
8.1.6 Kódování řetězců
Poznámka: Počítač dokáže zpracovávat jen sekvence jedniček a nul. Aby bylo jasné, jak binární čísla interpretovat jako text, musí být jasné kódování tohoto textu. Každý řetězec může mít v R jiné kódování. Nativně umí R dvě kódování: ISO Latin 1 a UTF-8. Kromě toho zvládá i nativní kódování daného počítače. Většinou se o kódování nemusíte nijak starat. Problém může nastat jen v případě přenosu dat mezi různými operačními systémy (v rámci Windows možná i mezi různými lokalizacemi). Naštěstí umí R změnit kódování i převést text z jednoho kódování do jiného. Základní dokumentaci ke kódování poskytuje help("Encoding")
.
Ke konverzi kódování řetězců je možné použít funkci iconv()
, viz dokumentace.