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.

  • 🔘 AtomIC típusok: Az R minden értéket logikai, egész, dupla, komplex, karakter vagy nyers értékként tárol.
  • ☑️ Típusellenőrzés: A class(), a typeof() és a mode() függvények három különböző nézőpontból írnak le egy értéket.
  • Vektorok: A c() függvény egy egydimenziós kollekciót hoz létre, amelyben minden elem egy típussal rendelkezik.
  • 🧪 Operators: A számtani, relációs, logikai és értékadó operátorok szinte minden bázis R kifejezést lefednek.
  • 🇧🇷 Részhalmaz: Szögletes zárójelek és logikai feltétel kombinációja. Vektoros szűrőelemek egyetlen sorban.
  • ⚠️ Verzió megjegyzés: Az R 4.3.0 hibát jelzett, ha a hossz nagyobb, mint egy argumentum && vagy || karakterekre van állítva.

Adattípusok R-ben

Mik az R adattípusai?

A következők az adattípusok vagy adatstruktúrák az R programozásban:

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 logikai és relációs operátorainak referenciatáblázata jelentésükkel együtt

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.

GYIK

Egy vektor csak egyféle elemet tartalmazhat, és a típusok keverése kényszeríti ki ezt a hatást. Egy lista az egyes slotokban lévő elemeket is tartalmazza, beleértve más listákat, adatkereteket vagy függvényeket is, ezért a modellobjektumok listák.

Amikor két különböző hosszúságú vektor találkozik egy operátorral, R a rövidebbet ismétli, amíg a hosszúságok meg nem egyeznek. A c(1,2,3,4) + c(1,2) képlet eredménye 2 4 4 6. Figyelmeztetés csak akkor jelenik meg, ha a hosszabb hosszúság nem többszörös.

Az NA egy hiányzó értéket jelöl egy vektoron belül. A NULL egy objektum hiányát jelöli, és nulla hosszúságú. A NaN egy definiálatlan numerikus eredmény, például 0/0. Az Inf az osztás nullával, mint például az 1/0.

A %in% operátor a tagságot vizsgálja, és IGAZ értéket ad vissza minden jobb oldali vektorban található bal oldali elemre. c(2,7) %in% c(1,2,3) IGAZ vagy HAMIS értéket ad vissza. A | jellel összekapcsolt == összehasonlítások hosszú láncait lecseréli.

Válassz egy mátrix numerikus rácsok és lineáris algebra esetén a adatkeret olyan táblázatok esetében, amelyek oszlopai típusukban különböznek, és a lista amikor az elemek különböző alakúak.

Az R 4.1.0 verzióban bevezetett |> függvény a bal oldalán lévő értéket adja át a jobb oldalán lévő függvény első argumentumának. Lépéseket láncol be egymásba ágyazott hívások nélkül, és a magrittr %>% pipe-pal ellentétben nem igényel csomagot.

MI-asszisztensek jelzik a típuseltéréseket, as.* konverziókat javasolnak, és sorok mintájából átkódolási kódot készítenek. Emellett funkciótervezési lépéseket is javasolnak egy gépi tanulás modell illesztése megtörtént. Mindig hasonlítsa össze a generált kódot az adataival.

Igen. Az RStudio 2023.09.0 és újabb verziói elérhetők. GitHub másodpilóta integráció, amely R-kifejezéseket hajt végre soronként. Copilot-előfizetés szükséges, és a rendszergazdáknak engedélyezniük kell az RStudio Serveren vagy a Posit Workbench-en.

Foglald össze ezt a bejegyzést a következőképpen: