Datové typy v R s příkladem
⚡ Chytré shrnutí
Datové typy v R definují, jak jsou hodnoty ukládány do paměti, a operátory rozhodují, co s nimi R může dělat. Zde jsou probrány vektory, proměnné, aritmetické, relační, logické a přiřazovací operátory s pomocí spustitelných příkladů.
Jaké jsou datové typy v R?
Následují datové typy nebo datové struktury v programování R:
- Skaláry
- vektory (číselné, znakové, logické)
- Matice
- Datové rámce
- seznamy
Tento seznam kombinuje dvě související myšlenky a jejich oddělení usnadňuje pochopení zbytku této stránky. datový typ popisuje, co je jedna hodnota – číslo, textový úsek, hodnota PRAVDA nebo NEPRAVDA. datová struktura popisuje, kolik hodnot je drženo pohromadě a v jakém tvaru. Skaláry, vektory, matice, datové rámce a seznamy jsou struktury; hodnoty uvnitř nich stále patří k jednomu ze základních typů R.
| Struktura | Rozměry | Jsou povoleny smíšené typy? | Typické použití |
|---|---|---|---|
| Skalární | Vektor délky 1 | Ne | Jedno měření nebo příznak |
| vektor | 1 | Ne | Sloupec údajů jednoho typu |
| Matice | 2 | Ne | Numerické mřížky a lineární algebra |
| Datový rámec | 2 | Ano, jeden typ na sloupec | Tabulkové datové sady |
| Seznam | 1, ale vnořitelné | Ano, cokoli na prvek | Výsledky modelu a smíšené kontejnery |
R nemá samostatný skalární typ: skalár je jednoduše vektor o délce jedna, a proto se tolik kódu v R píše pro celé vektory najednou.
Základní datové typy v R
Každá hodnota v R patří do jednoho z malé sady základních (atomických) typů:
- 4.5 je desetinná hodnota nazývaná číselná hodnota.
- Číslo 4 vypadá jako celé číslo, ale R ho stále ukládá jako typ double. Pokud je požadováno skutečné celé číslo, zapište 4L.
- PRAVDA nebo NEPRAVDA je booleovská hodnota, v R nazývaná logická hodnota.
- Hodnota uvnitř znaků ” ” nebo ' ’ je text (řetězec). Tyto hodnoty se nazývají znaky.
Dva další typy doplňují sadu. Komplexní hodnoty, jako například 3+2i, obsahují reálnou a imaginární část a nezpracované hodnoty obsahují bajty. Oba se v každodenní analýze objevují jen zřídka, ale jsou uvedeny v základním R. Dokumentace k funkci typeof() vedle čtyř běžných typů.
| Typ | Příklad hodnoty | class() vrací | typeof() vrací hodnotu |
|---|---|---|---|
| logický | TRUE | logický | logický |
| Celé číslo | 4L | celé číslo | celé číslo |
| Double (numerický) | 4.5 | numeric | zdvojnásobit |
| Znak | „R je fantastický“ | znak | znak |
| Komplex | 3+2i | komplexní | komplexní |
| Syrový | jako.raw(10) | syrový | syrový |
Typ proměnné můžeme ověřit pomocí funkce třídy.
Příklad 1: Kontrola číselné proměnné
# Declare variables of different types # Numeric x <- 28 class(x)
Výstup:
## [1] "numeric"
Příklad 2: Kontrola znakové proměnné
# String y <- "R is Fantastic" class(y)
Výstup:
## [1] "character"
Příklad 3: Kontrola logické proměnné
# Boolean z <- TRUE class(z)
Výstup:
## [1] "logical"
Všimněte si, že class() odpovídá na „numeric“ pro 28, i když 28 nemá desetinnou část. R jej uložil jako double a pouze typeof() to odhalí. Dalším rozdílem, který stojí za to se naučit, je, jak tyto hodnoty dostávají názvy.
Proměnné v R
Proměnné jsou jedním ze základních stavebních bloků v R, které ukládají hodnoty, a jsou důležité pro každého, kdo se zabývá datovou vědou. Proměnná v R může ukládat číslo, objekt, statistický výsledek, vektor, datovou sadu nebo predikci modelu – v podstatě cokoli, co R vygeneruje. Tuto proměnnou můžeme později použít jednoduše voláním jejího názvu.
Pro deklaraci proměnné v R musíme proměnné přiřadit název. Název nesmí obsahovat mezeru. Pro spojení dvou slov můžeme použít znak _.
Názvy mohou obsahovat písmena, číslice, tečky a podtržítka, ale musí začínat písmenem nebo tečkou a jako názvy nelze použít rezervovaná slova jako TRUE, FALSE a NULL. Chcete-li k proměnné přidat hodnotu, použijte znaky <- nebo =.
Zde je syntaxe:
# First way to declare a variable: use the `<-` name_of_variable <- value # Second way to declare a variable: use the `=` name_of_variable = value
Do příkazového řádku můžeme napsat následující kódy, abychom viděli, co se stane:
Příklad 1: Přiřazení hodnoty a její výpis
# Print variable x
x <- 42
x
Výstup:
## [1] 42
Příklad 2: Deklarace druhé proměnné
y <- 10 y
Výstup:
## [1] 10
Příklad 3: Použití dvou proměnných v jednom výrazu
# We call x and y and apply a subtraction
x-y
Výstup:
## [1] 32
Proměnná, která obsahuje několik hodnot stejného typu, je vektor, což je struktura, kterou očekává téměř každá funkce R.
Vektory v R
Vektor je jednorozměrná kolekce, ve které každý prvek sdílí stejný typ. Vektor můžeme vytvořit se všemi základními datovými typy R, které jsme se naučili dříve. Nejjednodušší způsob, jak vytvořit vektor v R, je použít funkci c().
Příklad 1: Vytvoření číselného vektoru
# Numerical
vec_num <- c(1, 10, 49)
vec_num
Výstup:
## [1] 1 10 49
Příklad 2: Vytvoření vektoru znaků
# Character vec_chr <- c("a", "b", "c") vec_chr
Výstup:
## [1] "a" "b" "c"
Příklad 3: Vytvoření logického vektoru
# Boolean vec_bool <- c(TRUE, FALSE, TRUE) vec_bool
Výstup:
##[1] TRUE FALSE TRUE
Pokud c() přijme kombinaci typů, neselže. Tiše převede všechny prvky na nejobecnější typ, který je k dispozici, takže c(1, "a", TRUE) se stane vektorem znaků. V R můžeme také provádět aritmetické výpočty s vektory.
Příklad 4: Sečtení dvou vektorů po jednotlivých prvcích
# Create the vectors vect_1 <- c(1, 3, 5) vect_2 <- c(2, 4, 6) # Take the sum of A_vector and B_vector sum_vect <- vect_1 + vect_2 # Print out total_vector sum_vect
Výstup:
[1] 3 7 11
Sčítání fungovalo prvek po prvku, protože oba vektory mají stejnou délku. Pokud se délky liší, R recykluje kratší vektor a opakuje ho, dokud se neshoduje s delším, a varuje pouze tehdy, když delší délka není násobkem kratšího vektoru.
Příklad 5: Rozdělení prvních pěti prvků
V R je možné vektor rozřezat. V některých případech nás zajímá pouze prvních pět prvků vektoru. K tomu můžeme použít příkaz [1:5].trachodnoty 1 až 5.
# Slice the first five rows of the vector
slice_vector <- c(1,2,3,4,5,6,7,8,9,10)
slice_vector[1:5]
Výstup:
## [1] 1 2 3 4 5
Příklad 6: Vytvoření rozsahu pomocí dvojtečky OperaTor
Nejkratší způsob, jak vytvořit rozsah hodnot, je použít operátor dvojtečky (:) mezi dvěma čísly. Například z výše uvedeného příkladu můžeme napsat c(1:10) pro vytvoření vektoru hodnot od jedné do deseti.
# Faster way to create adjacent values
c(1:10)
Výstup:
## [1] 1 2 3 4 5 6 7 8 9 10
Protože vektor při smíchání tiše mění typ, vyplatí se vědět, jak typy na vyžádání kontrolovat a převádět.
Jak kontrolovat a převádět datové typy v R
Tři rodiny funkcí odpovídají na tři otázky, které se neustále objevují: co je toto, je toto daného typu a může se toto stát jiným typem.
| Rodina funkcí | Otázka to odpovídá | Příklady |
|---|---|---|
| třída(), typ(), režim() | Jaký je tento typ hodnoty? | třída(28), typ(28), režim(28) |
| je.*() | Je tato hodnota typu X? | je.číselný(), je.znakový(), je.logický() |
| jako.*() | Může se tato hodnota stát typem X? | jako.číselný(), jako.znak(), jako.celé číslo() |
| str() | Jak tento objekt celkově vypadá? | str(číslo_vecu) |
# Three different views of the same value x <- 28 class(x) # "numeric" -- the class used for method dispatch typeof(x) # "double" -- how R stores the value internally mode(x) # "numeric" -- the older S-style mode # Ask a yes/no question about a type is.numeric(x) # TRUE is.character(x) # FALSE # Convert between types as.character(x) # "28" as.integer("28") # 28 stored as an integer as.numeric("abc") # NA, with a coercion warning
Většinu překvapení zde vysvětlují dvě pravidla. Zaprvé, class() hlásí třídu použitou pro odeslání metody, zatímco typeof() hlásí interní úložiště, což je důvod, proč je 28 pro jednu hodnotu „numeric“ a pro druhou „double“. Zadruhé, konverze, která nemůže být úspěšná, skript nezastaví: as.numeric("abc") vrací NA a vypíše varování o převodu, takže tiché NA po importu jsou téměř vždy problémem s typem. Stejná logika je klíčová. faktory, které ukládají kategorie jako celočíselné kódy a tabulku úrovní.
Jakmile jsou typy stanoveny, přicházejí na řadu operátory, které s nimi pracují.
R Aritmetika Operatorů
Nejprve si ukážeme základní aritmetické operátory v jazyce R. Následuje seznam aritmetických operátorů v programování v jazyce R a jejich význam:
| OperaTor | Description |
|---|---|
| + | Přidání |
| - | Vtracvání |
| * | Násobení |
| / | Divize |
| ^ nebo ** | Exponentiace |
| %% | Modulo (zbytek po dělení) |
| %/% | Celočíselné dělení (podíl, zbytek zahozený) |
Každý z těchto operátorů je vektorizován, takže stejný výraz funguje jak na jednu hodnotu, tak na celý sloupec.
Příklad 1: Sčítání
# An addition
3 + 4
Výstup:
## [1] 7
Výše uvedený kód R můžete snadno zkopírovat a vložit do RStudio Konzola. V tomto článku je výstup zobrazen na řádcích začínajících znaky ##. Pokud například napíšeme kód print("Guru99") konzole vypíše [1] "Guru99", což by tato stránka zobrazila jako ## [1] "Guru99 ".
Znak ## označuje řádek tištěného výstupu a číslo v hranaté závorce ([1]) je index první hodnoty na tomto řádku, nikoli součást výsledku.
Věty začínající znakem # jsou komentáře. Znak # můžeme uvnitř skriptu R použít k přidání libovolné poznámky a R ji za běhu ignoruje.
Příklad 2: Násobení
# A multiplication
3*5
Výstup:
## [1] 15
Příklad 3: Dělení
# A division
(5+5)/2
Výstup:
## [1] 5
Příklad 4: Umocňování
# Exponentiation
2^5
Výstup:
## [1] 32
Příklad 5: Modulo
# Modulo
28%%6
Výstup:
## [1] 4
Aritmetika vytváří čísla. Další skupina operátorů místo toho vytváří TRUE a FALSE.
Relační R (porovnání) Operatorů
Relační operátory porovnávají dvě hodnoty a vracejí logický výsledek. Jsou to operátory, které vytvářejí podmínky použité pro filtrování a jsou vektorizovány přesně stejným způsobem jako aritmetické operátory.
| OperaTor | Description |
|---|---|
| > | Větší než |
| < | Less než |
| >= | Větší nebo roven |
| <= | Less než nebo rovno |
| == | Přesně se rovná |
| != | Nerovná se |
a <- 10 b <- 3 a > b # TRUE a < b # FALSE a >= 10 # TRUE a <= 3 # FALSE a == b # FALSE a != b # TRUE # Relational operators are vectorised scores <- c(45, 78, 90, 62) scores >= 60 # FALSE TRUE TRUE TRUE
Dva návyky šetří čas. Používejte == pro porovnání a <- pro přiřazení, protože jednoduchý znak = uvnitř podmínky je běžnou chybou začátečníků. A vyhněte se == u čísel typu double: zaokrouhlování s plovoucí desetinnou čárkou znamená, že 0.1 + 0.2 == 0.3 je NEPRAVDA, takže isTRUE(all.equal(0.1 + 0.2, 0.3)) je bezpečný test. Porovnání na seřazené datové rámce dodržovat stejná pravidla.
R Logické Operatorů
Pomocí logických operátorů chceme vracet hodnoty uvnitř vektoru na základě logických podmínek. Níže uvedená tabulka uvádí logické operátory dostupné v jazyce R.
Logické příkazy v R jsou zabaleny uvnitř znaku [. Můžeme přidat libovolný počet podmíněných příkazů, ale musíme je uvést v závorkách. Podmíněný příkaz můžeme vytvořit pomocí této struktury:
variable_name[(conditional_statement)]
S proměnnou variable_name odkazující na proměnnou, kterou chceme pro příkaz použít, vytvoříme logický příkaz, například variable_name > 0. Nakonec použijeme hranaté závorky k dokončení logického příkazu. Níže je uveden příklad logického příkazu.
Příklad 1: Porovnání všech prvků vektoru
# Create a vector from 1 to 10
logical_vector <- c(1:10)
logical_vector>5
Výstup:
## [1]FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
Ve výše uvedeném výstupu R přečte každou hodnotu a porovná ji s příkazem logical_vector>5. Pokud je hodnota striktně větší než pět, pak je podmínka PRAVDA, jinak NEPRAVDA. R vrátí vektor PRAVDA a NEPRAVDA.
Příklad 2: Ponechat pouze prvky, které se shodují
V níže uvedeném příkladu chceme extract hodnoty, které splňují pouze podmínku „je striktně větší než pět“. K tomu můžeme podmínku uzavřít do hranatých závorek, kterým předchází vektor obsahující hodnoty.
# Print value strictly above 5
logical_vector[(logical_vector>5)]
Výstup:
## [1] 6 7 8 9 10
Příklad 3: Kombinace dvou podmínek
# Print 5 and 6
logical_vector <- c(1:10)
logical_vector[(logical_vector>4) & (logical_vector<7)]
Výstup:
## [1] 5 6
Příklad 3 používá jednoduchý ampersand & záměrně. Jednoznakové operátory & a | porovnávají vektory prvek po prvku a vracejí vektor, což je to, co potřebuje podmnožina. Dvojité operátory && a || vracejí jednu hodnotu a patří do podmínek if() a while(). Protože R 4.3.0Předání argumentu delšího než jeden prvek operátoru && nebo || je spíše chyba než varování, takže tyto dvě rodiny operátorů již nejsou zaměnitelné. Operátor ! negatuje podmínku a xor() poskytuje exkluzivní OR.
Přiřazení R Operatorů
Přiřazovací operátory vážou hodnotu na název. R jich nabízí více než většina jazyků a rozdíly se projeví, jakmile se kód přesune do... funkce.
| OperaTor | Description |
|---|---|
| <- | Levé přiřazení, idiomatická volba v R |
| = | Přiřazení vlevo, ale obvykle vyhrazeno pro argumenty funkcí |
| -> | Správné přiřazení, platné, ale zřídka používané |
| <<- | Superpřiřazení, které prohledává okolní prostředí |
| - >> | Pravé superasignace |
# Left assignment -- the idiomatic form count <- 5 # Equals sign: works, but reserve it for function arguments count = 5 round(3.14159, digits = 2) # Right assignment 5 -> count # Superassignment, used inside functions to reach an outer scope count <<- 5
Stylové průvodci doporučují <- pro vytváření objektů a = pro pojmenovávání argumentů uvnitř volání, protože tyto dvě role pak zůstávají vizuálně odlišné. <<- používejte střídmě: mění objekt mimo aktuální funkci a ztěžuje uvažování o kódu. Jakmile si zvyknete na přiřazení a typy, další kroky jsou... import reálných dat a Rešaping to s dplyr; Přehled jazyka R zasazuje celý nástrojový řetězec do kontextu.

