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ů.

  • 🔘 Atomtypy integrovaných obvodů: R ukládá každou hodnotu jako logickou, celočíselnou, dvojitou, komplexní, znakovou nebo surovou.
  • ☑️ Kontrola typů: class(), typeof() a mode() popisují hodnotu ze tří různých úhlů pohledu.
  • (Tj. Vektory: Funkce c() vytvoří jednorozměrnou kolekci, ve které každý prvek sdílí jeden typ.
  • 🧪 Operators: Aritmetické, relační, logické a přiřazovací operátory pokrývají téměř každý základní výraz v jazyce R.
  • 🛠️ Podmnožina: Hranaté závorky v kombinaci s logickou podmínkou filtrují prvky vektoru v jednom řádku.
  • ⚠️ Poznámka k verzi: Verze R 4.3.0 proměnila argument s délkou větší než jedna pro && nebo || v chybu.

Datové typy v R

Jaké jsou datové typy v R?

Následují datové typy nebo datové struktury v programování R:

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.

Referenční tabulka logických a relačních operátorů v R s jejich významy

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.

Nejčastější dotazy

Vektor obsahuje prvky pouze jednoho typu a míchání typů vynucuje převod. Seznam obsahuje cokoli v každém slotu, včetně jiných seznamů, datových rámců nebo funkcí, a proto jsou objekty modelu seznamy.

Když dva vektory různých délek narazí na operátor, R opakuje kratší vektor, dokud se jejich délky neshodnou. c(1,2,3,4) + c(1,2) dává 2 4 4 6. Varování se zobrazí pouze tehdy, když delší délka není násobkem.

NA označuje chybějící hodnotu uvnitř vektoru. NULL označuje nepřítomnost objektu a má nulovou délku. NaN je nedefinovaný číselný výsledek, například 0/0. Inf je dělení nulou, například 1/0.

Operátor %in% testuje členství a vrací TRUE pro každý levý prvek nalezený v pravém vektoru. c(2,7) %in% c(1,2,3) vrací TRUE FALSE. Nahrazuje dlouhé řetězce porovnání == spojených znakem |.

Vyberte si matice pro numerické mřížky a lineární algebru, a datový rámec pro tabulky, jejichž sloupce se liší typem, a lest když prvky mají různé tvary.

Funkce |>, zavedená v R 4.1.0, předává hodnotu nalevo od sebe do prvního argumentu funkce napravo od sebe. Řetězuje kroky bez vnořování volání a nepotřebuje žádný balíček, na rozdíl od roury magrittr %>%.

Asistenti umělé inteligence označují neshody typů, navrhují konverze typu as.* a vytvářejí návrhy kódu pro překódování ze vzorku řádků. Také navrhují kroky pro vývoj funkcí před... strojové učení model je nasazen. Vždy zkontrolujte vygenerovaný kód oproti vašim datům.

Ano. RStudio 2023.09.0 a novější se dodávají GitHub Copilot integrace, která dokončuje výrazy R přímo. Je vyžadováno předplatné Copilot a administrátoři jej musí povolit na serveru RStudio Server nebo Posit Workbench.

Shrňte tento příspěvek takto: