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.5 Porovnávání řetězců

Porovnat, zda jsou dva řetězce stejné, je možné pomocí ==:

"abc" == "abc"
## [1] TRUE
"abc" == "ABC"
## [1] FALSE

Funguje i funkce all.equal():

all.equal("abc", "abc", "abc")
## [1] TRUE

Lze použít i >, < atd.

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.