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”) aFALSE
(“nepravda”). Tyto hodnoty je možné zkrátit naT
aF
, ale výrazně se to nedoporučuje, protože zkrácená jménaT
aF
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.).
<- TRUE # logická hodnota
x1 x1
## [1] TRUE
<- 1L # celé číslo
x2 x2
## [1] 1
<- 1 # reálné číslo
x3 x3
## [1] 1
<- 'Josef řekl: "Miluji R!"' # řetězec
x4 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