4.1 Základní datové typy

Data se skládají z jednotlivých hodnot. Každá taková hodnota má určitý datový typ. V R existuje mnoho základních typů dat. Pro datovou analýzu se však hodí především následující čtyři datové typy:

  • logical může obsahovat jen dvě logické hodnoty: TRUE (“pravda”) a FALSE (“nepravda”). Tyto hodnoty je možné zkrátit na T a F, ale výrazně se to nedoporučuje, protože zkrácená jména T a F je možné předefinovat, po čemž by původně funkční kód dělal nepředvídatelné věci.
  • integer může obsahovat kladná i záporná celá čísla. Pokud je chcete zadat, musíte za číslo napsal L, tj. např. 1L.
  • double může obsahovat kladná i záporná reálná čísla. Když zadáte v konzoli nebo skriptu číslo bez příznaku L, bude v paměti reprezentované jako double, i když to bude shodou okolností celé číslo. V konzoli však R vypíše celá čísla inteligentně bez desetinných míst, i když jsou uložená v proměnné typu double.
  • character může obsahovat libovolný řetězec (text). V R se řetězce zadávají mezi dvěma uvozovkami nebo apostrofy. Uvozovky a apostrofy nelze kombinovat, tj. nejde jeden řetězec uvést uvozovkou a ukončit apostrofem. To umožňuje zadat apostrofy nebo uvozovky jako součást řetězce tak, že je např. řetězec uvozen i ukončen uvozovkami a uvnitř řetězce je použit apostrof. Jinou možností, jak zadat uvozovky, apostrofy a jiné zvláštní znaky, je “escapovat” je, tj. napsat je pomocí zpětného lomítka \ a vybraného znaku (např. \" znamená uvozovku, \n konec řádku apod.).
x1 <- TRUE  # logická hodnota
x1
## [1] TRUE
x2 <- 1L  # celé číslo
x2
## [1] 1
x3 <- 1  # reálné číslo
x3
## [1] 1
x4 <- 'Josef řekl: "Miluji R!"'  # řetězec
x4
## [1] "Josef řekl: \"Miluji R!\""

Při zadávání reálných čísel se desetinná místa oddělují tečkou, ne čárkou.

1.3
## [1] 1.3

Čárky oddělují parametry ve funkcích – jinde způsobí chybovou hlášku!

1,3
## Error: <text>:1:2: unexpected ','
## 1: 1,
##      ^

Reálná čísla jde zadat i pomocí tzv. “vědecké notace,” kde číslo před e je mantisa, číslo za e dekadický exponent:

1.3e3   # 1.3 krát 10 na třetí, tj. 1 300
## [1] 1300
2.7e-5  # 2.7 krát 10 na minus pátou, tj. 0.000027
## [1] 2.7e-05

R někdy reálná čísla takto samo vypisuje. Pokud chcete ovlivnit, jak bude reálné číslo vypsané, můžete použít funkci format() (víc parametrů viz nápověda funkce):

format(2.7e-5, scientific = FALSE)
## [1] "0.000027"

Mezi proměnnou typu integer a double je několik rozdílů. Hlavní z nich se týká přesnosti: typ integer sice umí zahrnout jen celá čísla, reprezentuje je však naprosto přesně. Naproti tomu typ double umí zahrnout i desetinná čísla (a také velmi velká čísla), reprezentuje je však pouze přibližně, takže v následujícím výpočtu vznikne chyba, i když velmi malá:

sqrt(2) ^ 2 - 2  # odmocnina 2 umocněná na druhou minus 2
## [1] 4.440892e-16