Adattípusok R-ben példával
⚡ Okos összefoglaló
Az R adattípusai határozzák meg, hogyan tárolódnak az értékek a memóriában, az operátorok pedig eldöntik, hogy az R mit kezdhet velük. Vektorokat, változókat, aritmetikai, relációs, logikai és értékadó operátorokat tárgyalunk itt futtatható példákkal illusztrálva.

Mik az R adattípusai?
A következők az adattípusok vagy adatstruktúrák az R programozásban:
- Skalárok
- Vektorok (numerikus, karakteres, logikai)
- mátrixok
- Adatkeretek
- listák
Ez a lista két kapcsolódó gondolatot ötvöz, és szétválasztásuk megkönnyíti az oldal többi részének követését. adattípus leírja, hogy mit jelent egyetlen érték – egy szám, egy szövegrészlet, IGAZ vagy HAMIS. adatszerkezet leírja, hogy hány érték van együtt tartva és milyen alakban. A skalárok, vektorok, mátrixok, adatkeretek és listák struktúrák; a bennük lévő értékek továbbra is az R egyik alaptípusához tartoznak.
| Szerkezet | Méretek | Vegyes típusok megengedettek? | Tipikus felhasználás |
|---|---|---|---|
| skaláris | Hossz-1 vektor | Nem | Egyetlen mérés vagy jelző |
| vektor | 1 | Nem | Egyféle leolvasási oszlop |
| Mátrix | 2 | Nem | Numerikus rácsok és lineáris algebra |
| Adatkeret | 2 | Igen, oszloponként egy típus | Táblázatos adatkészletek |
| Lista | 1, de egymásba rakható | Igen, elemenként bármi | Modellelési eredmények és vegyes tartályok |
Az R-nek nincs külön skalártípusa: egy skalár egyszerűen egy egy hosszúságú vektor, ezért írnak annyi R kódot egyszerre egész vektorokra.
Alapvető adattípusok R-ben
R minden értéke egy kis alap (atomi) típushalmaz egyikéhez tartozik:
- A 4.5 egy decimális érték, amelyet numerikusnak neveznek.
- A 4 egész számnak tűnik, de az R továbbra is dupla egész számként tárolja. Írj 4L-t, ha valódi egész számra van szükség.
- Az IGAZ vagy HAMIS egy logikai érték, amit az R-ben logikai értéknek nevezünk.
- A ” ” vagy ' ” karakterek között lévő érték szöveg (karakterlánc). Ezeket az értékeket karaktereknek nevezzük.
További két típus teszi teljessé a készletet. Az összetett értékek, mint például a 3+2i, egy valós és egy képzetes részt tartalmaznak, a nyers értékek pedig bájtokat. Mindkettő ritkán jelenik meg a mindennapi elemzésekben, de az R alapban szerepelnek. typeof() dokumentáció a négy gyakori típus mellett.
| típus | Példaérték | osztály() visszatérési érték | typeof() visszatérési érték |
|---|---|---|---|
| logikus | TRUE | logikus | logikus |
| Egész szám | 4L | egész szám | egész szám |
| Double (numerikus) | 4.5 | numerikus | kétszeresére |
| Karakter | "R fantasztikus" | karakter | karakter |
| Bonyolult | 3+2i | bonyolult | bonyolult |
| Nyers | as.raw(10) | nyers | nyers |
Egy változó típusát az osztályfüggvénnyel ellenőrizhetjük.
1. példa: Numerikus változó ellenőrzése
# Declare variables of different types # Numeric x <- 28 class(x)
output:
## [1] "numeric"
2. példa: Karakterváltozó ellenőrzése
# String y <- "R is Fantastic" class(y)
output:
## [1] "character"
3. példa: Logikai változó ellenőrzése
# Boolean z <- TRUE class(z)
output:
## [1] "logical"
Figyeljük meg, hogy a class() függvény a 28-as számra "numerikus" választ ad, annak ellenére, hogy a 28-nak nincs decimális része. Az R dupla számként tárolta el, és csak a typeof() függvény mutatja ezt. A következő különbség, amit érdemes megtanulni, az, hogy ezek az értékek hogyan kapnak nevet.
Változók az R-ben
A változók az R egyik alapvető építőelemei, amelyek értékeket tárolnak, és mindenkinek fontosak, aki adattudományi munkát végez. Egy R változó tárolhat számot, objektumot, statisztikai eredményt, vektort, adathalmazt vagy modell-előrejelzést – alapvetően bármit, amit az R kiad. Ezt a változót később egyszerűen a nevének meghívásával használhatjuk.
Egy változó R-ben való deklarálásához nevet kell adnunk neki. A név nem tartalmazhat szóközt. Két szó összekapcsolására használhatunk _ jelet.
A nevek tartalmazhatnak betűket, számjegyeket, pontokat és aláhúzásjeleket, de betűvel vagy ponttal kell kezdődniük, és a foglalt szavak, mint például az IGAZ, HAMIS és NULL, nem használhatók névként. Érték hozzáadásához a változóhoz használjuk a <- vagy = jelet.
Íme a szintaxis:
# First way to declare a variable: use the `<-` name_of_variable <- value # Second way to declare a variable: use the `=` name_of_variable = value
A parancssorban a következő kódokat írhatjuk be, hogy megnézzük, mi történik:
1. példa: Érték hozzárendelése és kinyomtatása
# Print variable x
x <- 42
x
output:
## [1] 42
2. példa: Második változó deklarálása
y <- 10 y
output:
## [1] 10
3. példa: Két változó használata egy kifejezésben
# We call x and y and apply a subtraction
x-y
output:
## [1] 32
Egy olyan változót, amely több azonos típusú értéket tartalmaz, vektornak nevezünk, amely struktúra szinte minden R függvényt jellemez.
Vektorok R-ben
A vektor egy egydimenziós halmaz, amelyben minden elem azonos típusú. Létrehozhatunk egy vektort az összes korábban tanult alapvető R adattípussal. Az R-ben a vektorépítés legegyszerűbb módja a c() függvény használata.
1. példa: Numerikus vektor létrehozása
# Numerical
vec_num <- c(1, 10, 49)
vec_num
output:
## [1] 1 10 49
2. példa: Karaktervektor létrehozása
# Character vec_chr <- c("a", "b", "c") vec_chr
output:
## [1] "a" "b" "c"
3. példa: Logikai vektor létrehozása
# Boolean vec_bool <- c(TRUE, FALSE, TRUE) vec_bool
output:
##[1] TRUE FALSE TRUE
Ha a c() függvény többféle típust kap, akkor nem hibázik. Csendben felkonstruál minden elemet a legáltalánosabb típusra, így a c(1, "a", TRUE) karaktervektorrá válik. Az R-ben aritmetikai számításokat is végezhetünk vektorokon.
4. példa: Két vektor hozzáadása elemenként
# 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
output:
[1] 3 7 11
Az összeadás elemenként történt, mivel mindkét vektor azonos hosszúságú. Amikor a hosszúságok eltérőek, az R újrahasznosítja a rövidebb vektort, és addig ismétli, amíg meg nem egyezik a hosszabbal, és csak akkor figyelmeztet, ha a hosszabb hosszúság nem a rövidebb többszöröse.
5. példa: Az első öt elem szeletelése
R-ben lehetőség van egy vektor szeletelésére. Bizonyos esetekben csak a vektor első öt elemére vagyunk kíváncsiak. Használhatjuk az [1:5] parancsot a következő példa kiszámításához:tracaz 1-től 5-ig terjedő értékeket.
# 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]
output:
## [1] 1 2 3 4 5
6. példa: Tartomány létrehozása kettősponttal Operator
Értéktartomány létrehozásának legrövidebb módja a kettőspont operátor (:) használata két szám között. A fenti példából például a c(1:10) képlettel létrehozhatunk egy és tíz közötti értékekből álló vektort.
# Faster way to create adjacent values
c(1:10)
output:
## [1] 1 2 3 4 5 6 7 8 9 10
Mivel egy vektor keveréskor észrevétlenül változtatja a típusát, érdemes tudni, hogyan lehet igény szerint megvizsgálni és konvertálni a típusokat.
Adattípusok ellenőrzése és konvertálása R-ben
Három függvénycsalád ad választ a három állandóan felmerülő kérdésre: mi ez, adott típus-e ez, és válhat-e ez egy másik típussá.
| Függvénycsalád | Kérdés, amit megválaszol | Példák |
|---|---|---|
| osztály(), típus(), mód() | Milyen típusú ez az érték? | osztály(28), típus(28), mód(28) |
| van.*() | Ez az érték X típusú? | is.numeric(), is.character(), is.logical() |
| mint.*() | Ez az érték X típusúvá válhat? | as.numeric(), as.character(), as.integer() |
| str() | Hogyan néz ki ez az objektum összességében? | str(vektor_szám) |
# 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
Két szabály magyarázza a legtöbb meglepetést. Először is, a class() a metódusok feladásához használt osztályt adja vissza, míg a typeof() a belső tárhelyet, ezért a 28 az egyikhez képest "numerikus", a másikhoz pedig "dupla". Másodszor, egy sikertelen konverzió nem állítja le a szkriptet: az as.numeric("abc") NA-t ad vissza, és egy kényszerítési figyelmeztetést ír ki, így az importálás utáni csendes NA-k szinte mindig típusproblémát jelentenek. Ugyanez a logika vezérli a ... tényezők, amelyek egész kódokként, valamint egy szinttáblázatként tárolják a kategóriákat.
Miután a típusok rögzítettek, a következő lépés az azokra ható operátorok sorakoznak.
R Aritmetika Operatorzok
Először az R alapvető aritmetikai operátorait fogjuk megismerni. Az alábbiakban az R programozásban használt aritmetikai operátorok és azok rövidítései láthatók:
| Operator | Leírás |
|---|---|
| + | Kiegészítés |
| - | alatttracCIÓ |
| * | Szorzás |
| / | osztály |
| ^ vagy ** | Hatványozás |
| %% | Modulo (osztás utáni maradék) |
| %/% | Egészszámos osztás (hányados, maradék elhagyva) |
Ezen operátorok mindegyike vektorizált, így ugyanaz a kifejezés egyetlen értékre vagy egy egész oszlopra is működik.
1. példa: Összeadás
# An addition
3 + 4
output:
## [1] 7
A fenti R kódot könnyen kimásolhatod és beillesztheted a RStudio Konzol. Ebben a cikkben a kimenet a ## karakterekkel kezdődő sorokban jelenik meg. Például, ha a print(" kódot írjukGuru99") a konzol kiírja: [1] "Guru99", amit ez az oldal így jelenítene meg: ## [1] "Guru99 ".
A ## a kinyomtatott kimenet sorait jelöli, a szögletes zárójelben lévő szám ([1]) pedig az adott sor első értékének indexe, nem az eredmény része.
A # jellel kezdődő mondatok megjegyzések. Egy R szkripten belül a # jellel bármilyen megjegyzést hozzáadhatunk, és az R futási időben figyelmen kívül hagyja azt.
2. példa: Szorzás
# A multiplication
3*5
output:
## [1] 15
3. példa: Osztás
# A division
(5+5)/2
output:
## [1] 5
4. példa: Hatványozás
# Exponentiation
2^5
output:
## [1] 32
5. példa: Modulo
# Modulo
28%%6
output:
## [1] 4
Az aritmetikai művelet számokat eredményez. A következő operátorcsoport IGAZ és HAMIS eredményt ad.
R Relációs (összehasonlító) Operatorzok
A relációs operátorok két értéket hasonlítanak össze, és logikai eredményt adnak vissza. Ezek azok az operátorok, amelyek a szűréshez használt feltételeket építik fel, és pontosan ugyanúgy vektorizálódnak, mint a számtani operátorok.
| Operator | Leírás |
|---|---|
| > | Nagyobb, mint |
| < | Less mint |
| >= | Nagyobb vagy egyenlő |
| <= | Less mint vagy egyenlő |
| == | Pontosan egyenlő |
| != | Nem egyenlő |
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
Két szokás időt takarít meg itt meg. Használj == jelet összehasonlításhoz és <- jelet értékadáshoz, mert egyetlen = egy feltételen belül gyakori kezdő hiba. És kerüld az == jelet dupla értékeknél: a lebegőpontos kerekítés azt jelenti, hogy a 0.1 + 0.2 == 0.3 HAMIS, tehát az isTRUE(all.equal(0.1 + 0.2, 0.3)) a biztonságos teszt. Összehasonlítások a rendezett adatkeretek ugyanazokat a szabályokat követik.
R Logikai Operatorzok
Logikai operátorok esetén a vektoron belüli értékeket szeretnénk visszaadni logikai feltételek alapján. Az alábbi táblázat felsorolja az R-ben elérhető logikai operátorokat.
Az R nyelvben a logikai utasítások [ karakterek] közé vannak csomagolva. Annyi feltételes utasítást adhatunk hozzá, amennyit csak akarunk, de zárójelek közé kell tenni őket. A feltételes utasítás létrehozásához a következő struktúrát követhetjük:
variable_name[(conditional_statement)]
A változó_neve paraméterrel a művelethez használni kívánt változóra hivatkozva hozzuk létre a logikai utasítást, például változó_neve > 0. Végül a szögletes zárójelekkel zárjuk le a logikai utasítást. Az alábbiakban egy logikai utasításra láthatunk példát.
1. példa: Egy vektor minden elemének összehasonlítása
# Create a vector from 1 to 10
logical_vector <- c(1:10)
logical_vector>5
output:
## [1]FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
A fenti kimenetben az R beolvassa az egyes értékeket, és összehasonlítja azokat a logikai_vektor>5 utasítással. Ha az érték szigorúan nagyobb, mint öt, akkor a feltétel IGAZ, egyébként HAMIS. Az R IGAZ és HAMIS értékekből álló vektort ad vissza.
2. példa: Csak az egyező elemek megtartása
Az alábbi példában azt szeretnénk kideríteni, hogytract azokat az értékeket, amelyek csak az „egyértelműen nagyobb, mint öt” feltételnek felelnek meg. Ehhez a feltételt szögletes zárójelbe tehetjük, amelyet az értékeket tartalmazó vektor előz meg.
# Print value strictly above 5
logical_vector[(logical_vector>5)]
output:
## [1] 6 7 8 9 10
3. példa: Két feltétel kombinálása
# Print 5 and 6
logical_vector <- c(1:10)
logical_vector[(logical_vector>4) & (logical_vector<7)]
output:
## [1] 5 6
A 3. példa szándékosan használja az & jel egyetlen karakterét. Az & és | egykarakteres operátorok elemenként hasonlítják össze a vektorokat, és egy vektort adnak vissza, amire a részhalmaznak szüksége van. Az && és || dupla alakok egy értéket adnak vissza, és az if() és while() feltételekhez tartoznak. Mivel R 4.3.0Ha egy elemnél hosszabb argumentumot adunk át az && vagy a || függvénynek, az inkább hiba, mint figyelmeztetés, így a két család már nem felcserélhető. A ! operátor negál egy feltételt, az xor() pedig kizáró VAGY műveletet ad.
R hozzárendelés Operatorzok
Az értékadó operátorok egy értéket egy névhez kötnek. Az R többet kínál belőlük, mint a legtöbb nyelv, és a különbségek akkor válnak lényegessé, amikor a kód átkerül a következőbe: funkciók.
| Operator | Leírás |
|---|---|
| <- | Balra osztás, az R-ben szereplő idiomatikus választás |
| = | Balra helyezett értékadás, de általában a függvény argumentumainak van fenntartva |
| -> | Helyes hozzárendelés, érvényes, de ritkán használják |
| <<- | Szuperhozzárendelés, amely a körülvevő környezeteket keresi |
| - >> | Jobb felülbírálás |
# 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
A stíluskalauzok a <- karaktert javasolják objektumok létrehozásához, és az = karaktert az argumentumok híváson belüli elnevezéséhez, mivel a két szerepkör így vizuálisan elkülönül. A <<- karaktert csak mértékkel használjuk: ez az aktuális függvényen kívüli objektumot módosít, és megnehezíti a kód megértését. Miután az értékadás és a típusok már kényelmesen működnek, a következő lépések a következők: valós adatok importálása és reshaping vele dplyr; a R nyelv áttekintése kontextusba helyezi az egész eszköztárat.

