Listák R programozásban: Elemek létrehozása és kiválasztása
⚡ Okos összefoglaló
Az R List egy olyan objektum, amely vektorokat, mátrixokat, adatkereteket és akár más listákat is tárol egyetlen konténerben. A list() függvény felépíti, és a dupla szögletes zárójelek kihúzzák belőle a kívánt elemeket.

Mi az az R-lista?
R lista egy olyan objektum az R programozásban, amely mátrixokat, vektorokat, adatkereteket vagy listákat tartalmaz. Az R List objektumok gyűjteményének tárolására is használható, és akkor használjuk őket, amikor szükségünk van rájuk. Elképzelhetjük az R listát egy táskaként, ahol sokféle tárgyat helyezhetünk el. Amikor használnunk kell egy tárgyat, kinyithatjuk a táskát és használhatjuk.
A vektorral való különbség teszi a zsákot hasznossá. Egy vektor minden elemet egyetlen típusba kényszerít, így egy szó elhelyezése egy szám mellé szöveggé alakítja a számot. Egy lista nem vonatkozik ilyen szabályra, ezért hordozhat öt elemű vektort, egy kétsorost mátrix és egy 714 soros adatkeretet egymás mellett anélkül, hogy bármelyiket is megváltoztatnánk.
A lista szintaxisa az R-ben
R programozásban a list() függvénnyel hozhatunk létre listákat:
list(element_1, ...) arguments: -element_1: store any type of R object -...: pass as many objects as specifying. each object needs to be separated by a comma
Minden argumentum átadható üresen vagy a következő formában: címke = értékEgy csupasz argumentum egy pozicionális elemmé válik, amely csak a száma alapján érhető el, míg egy címkézett argumentum nevet is kap. Az alap R hivatkozás a következőhöz: lista () A dokumentációk formákat és megjegyzik, hogy az unlist() az as.list() közelítő inverzeként működik.
Hogyan készítsünk listát R-ben
Az alábbiakban egy lépésről lépésre bemutatjuk, hogyan hozhat létre listát az R-ben:
Az alábbi példában három különböző objektumot fogunk létrehozni, egy vektort, egy mátrixot és egy Dataframe a lista funkció használatával az R-ben.
1. lépés) Hozzon létre egy vektort
Használja az alábbi kódot vektor létrehozásához R-ben
# Vector with numeric from 1 up to 5
vect <- 1:5
A kettőspont operátor az 1, 2, 3, 4, 5 sorozatot egész vektorként építi fel, és az értékadó nyíl vect néven tárolja.
2. lépés) Hozzon létre egy mátrixot
Most hozz létre egy mátrixot a következő kóddal
# A 2x 5 matrix
mat <- matrix(1:9, ncol = 5)
dim(mat)
Két részlet érdemel itt figyelmet. Egy két soros és öt oszlopos rácsnak tíz értékre van szüksége, mégis csak kilencet adunk meg, ezért az R újrahasznosítja a sorozatot, és egy figyelmeztetést nyomtat, hogy az adathossz nem a sorok számának többszöröse. Ez az újrahasznosított érték az oka annak, hogy a kinyomtatott mátrix második sora 1-gyel végződik 10 helyett. A dim() függvény hívása ezután visszaadja az alakzatot.
output:
## [1] 2 5
3. lépés: Adatkeret létrehozása
Hozzon létre egy adatkeretet R-ben az alábbi kód segítségével
# select the 10th row of the built-in R data set EuStockMarkets
df <- EuStockMarkets[1:10,]
A megjegyzés a tizedik sort említi, de a kifejezés megtartja a beépített EuStockMarkets sorozat 1-től 10-ig terjedő sorait. A részhalmaz az idősor osztályt is elhagyja, így egy numerikus mátrixot ad vissza, nem pedig valódi adatkeretet, pontosan ezért tartalmaz az alábbi kinyomtatott eredmény [1,] stílusú sorcímkéket a sornevek helyett. Csomagolja be a hívást az as.data.frame() függvénybe, amikor valódi adatkeretre van szükség.
4. lépés) Hozzon létre egy listát az R-ben
Most a három objektumot az R listába helyezhetjük az alábbi kód segítségével
# Construct list with these vec, mat, and df:
my_list <- list(vect, mat, df)
my_list
output:
## [[1]] ## [1] 1 2 3 4 5 ## [[2]] ## [,1] [,2] [,3] [,4] [,5] ## [1,] 1 3 5 7 9 ## [2,] 2 4 6 8 1 ## [[3]] ## DAX SMI CAC FTSE ## [1,] 1628.75 1678.1 1772.8 2443.6 ## [2,] 1613.63 1688.5 1750.5 2460.2 ## [3,] 1606.51 1678.6 1718.0 2448.2 ## [4,] 1621.04 1684.1 1708.1 2470.4 ## [5,] 1618.16 1686.6 1723.1 2484.7 ## [6,] 1610.61 1671.6 1714.3 2466.8 ## [7,] 1630.75 1682.9 1734.5 2487.9 ## [8,] 1640.17 1703.6 1757.4 2508.4 ## [9,] 1635.47 1697.5 1754.0 2510.5 ## [10,] 1645.89 1716.3 1754.3 2497.4
A kimenetben található három dupla zárójeles fejléc a lista pozícióit jelöli. Semmi sem lett lapítva vagy kényszerítve: az első elem továbbra is egy egész vektor, a második elem továbbra is egy mátrix, a harmadik elem pedig továbbra is tartalmazza mind a tíz sor részvényárat.
Válassza az Elemeket az R listából
Miután elkészítettük a listánkat, könnyen hozzáférhetünk hozzá. Az [[index]] karaktert kell használnunk egy elem kiválasztásához a listában. A dupla szögletes zárójelben lévő érték a kiszámolni kívánt elem pozícióját jelöli a listában.tract. Például, ha a zárójelen belül 2-t adunk át, az R a másodikként felsorolt elemet adja vissza.
Most ebben R oktatóanyag, próbáljuk meg kiválasztani a listák második elemét az R-ben my_list néven, mi a my_list[[2]]
# Print second element of the list
my_list[[2]]
output:
## [,1] [,2] [,3] [,4] [,5] ## [1,] 1 3 5 7 9 ## [2,] 2 4 6 8 1
Az egyes és a kettős zárójelek nem felcserélhetők, és összekeverésük a listahibák leggyakoribb forrása. Egy zárójel megtartja a csomagolást, két zárójel eltávolítja.
| Kifejezés | Ami visszajön | Az eredmény osztályozása | Használd, amikor |
|---|---|---|---|
| sajat_listám[[2]] | Maga a tárolt elem | Bármit is tároltak, itt egy mátrix | Egy elemre kell számolnod |
| sajat_listám[2] | Egy allista, amely azt az egy elemet tartalmazza | lista | Meg kell őrizned a listaburkolót |
| sajat_list[c(1, 3)] | A kiválasztott elemek allitsa | lista | Több elemre van szüksége egyszerre |
| sajat_listám[-2] | Minden elem, kivéve a másodikat | lista | El kell dobnod egy elemet |
# Compare the two bracket styles class(my_list[[2]]) # the matrix itself class(my_list[2]) # a list of length one # Several elements, and everything but one element my_list[c(1, 3)] my_list[-2]
Név szerinti listák R-ben
A pozícióindexek sérülékenyek: egy elemet kell beszúrni, és minden utána következő szám eltolódik. Az elemek elnevezése kiküszöböli ezt a kockázatot, és a kódot úgy olvassa a rendszer, mint az általuk leírt adatokat. A nevek megadhatók a lista építésekor, vagy utólag is csatolhatók a names() függvénnyel.
# Tag each element at creation time named_list <- list(numbers = vect, grid = mat, prices = df) # Three ways to reach the same element named_list$grid named_list[["grid"]] named_list["grid"] # returns a one-element list # Read or replace the names later names(named_list) names(named_list)[2] <- "grid_2x5"
A $ operátor és a dupla zárójel egy tekintetben különbözik, ami megfogja a kezdőket. A $ operátor részleges egyezést végez, így a named_list$pri továbbra is megtalálja az árakat, míg a named_list[[„pri”]] NULL értéket ad vissza, mivel a dupla zárójel pontosan egyezik, kivéve, ha az exact = FALSE értéket adjuk át. A részleges egyezés a konzolon kényelmes, de szkriptben nem biztonságos, ezért a mentett kódban a pontos formát részesítsük előnyben.
# A compact map of the whole structure
str(named_list)
Az str() függvény elemenként egy sort nyomtat ki a típusával és méretével, ami a leggyorsabb módja annak, hogy indexelés előtt ellenőrizzük, hogy egy lista tartalmazza-e a várt tartalmat.
Elemek módosítása, hozzáadása és törlése egy R listában
Egy lista létrehozás után nem végleges. Ugyanazok az akcesszorok írnak is rá, amelyek olvassák az elemet, így a lista frissítése, kiterjesztése és zsugorítása mind hagyományos értékadást használ.
# Replace an element in place named_list[["numbers"]] <- 1:10 # Add a new element simply by naming it named_list[["created"]] <- Sys.Date() # Append without a name: the element lands at the end named_list <- append(named_list, list(TRUE)) # Delete an element by assigning NULL to it named_list[["created"]] <- NULL
- Csere: Egy meglévő névhez rendelve felülírja az adott elemet, és a pozícióját változatlanul hagyja.
- Kedvencek: Egy nem létező névhez rendelve egy új elemet fűzünk a lista végéhez.
- Mellékel: Az append() egy listát fogad el második argumentumként, ezért a list()-ben átadása előtt egy üres értéket kell megadni.
- Töröl: A NULL érték dupla zárójelben történő megadása eltávolítja az elemet és lerövidíti a listát.
Az egyik következmény rendszeresen botlást okoz az embereknek: mivel a NULL törlést jelent, nem tárolhatsz tényleges NULL értéket dupla zárójelben. Ehelyett használj egyetlen zárójeles értékadást, például a named_list[„üres”] <- list(NULL) formában, amely megtartja a helyet, és NULL értéket helyez el benne.
Beágyazott listák és unlist() az R-ben
Mivel egy lista bármilyen R objektumot tartalmazhat, egy másik listát is tartalmazhat. A beágyazás az, ahogyan a konfigurációs objektumokat, a JSON válaszokat és a modell eredményeit általában ábrázolják az R-ben, így egy beágyazott listához való hozzáférés és egy lapítás mindennapi feladat.
# A list whose elements are themselves lists project <- list( meta = list(owner = "analyst", year = 2026), data = list(vect, mat) ) # Chain the accessors to reach an inner value project$meta$year project[["data"]][[2]] # Flatten every level into one atomic vector flat <- unlist(project) # Strip a single level and keep the rest as a list half <- unlist(project, recursive = FALSE)
A lapításnak megvan az ára, amit érdemes megérteni. Az unlist() függvénynek egyetlen atomi vektort kell visszaadnia, így minden értéket a legáltalánosabb előforduló típusra konvertál, a következő sorrendet követve: logikai, egész, dupla, karakter. Egy beágyazott lista, amely számokat és szöveget kever, ezért teljes egészében szövegként tér vissza. Az eredmény nevei a külső és belső címkék összekapcsolásával épülnek fel, ezért érkezik egy elem meta.ownerként, és nem ownerként.
Adja át a use.names = FALSE értéket, ha ezek az összetett nevek nemkívánatosak, és állítsa a recursive = FALSE értéket, ha csak a legkülső réteget kell eltávolítani. Ha az értékeknek meg kell tartaniuk a típusukat, akkor hagyja érintetlenül a struktúrát, és a lista lapítása helyett haladjon végig rajta.
Beépített adatkeret R-ben
A listákat gyakran lemezről vagy a webről beolvasott adatokkal töltik meg, ezért hasznos látni, hogyan érkezik meg egy adatkeret, mielőtt az egyben tárolódna. Mielőtt létrehoznánk saját adatkeretünket, megnézhetjük az online elérhető R adatkészletet. A börtönadatkészlet egy 714×5 dimenziós. A tail() függvénnyel gyorsan áttekinthetjük az adatkeret alját. Hasonlóképpen, a head() az adatkeret tetejét jeleníti meg. A head(df, 5) függvénnyel megadhatjuk a megjelenített sorok számát. A read.csv() függvénnyel többet is megtudunk majd a következő részben. adatok importálása R-ben tutorial.
PATH <-'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/prison.csv'
df <- read.csv(PATH)[1:5]
head(df, 5)
output:
## X state year govelec black ## 1 1 1 80 0 0.2560 ## 2 2 1 81 0 0.2557 ## 3 3 1 82 1 0.2554 ## 4 4 1 83 0 0.2551 ## 5 5 1 84 0 0.2548
A read.csv() függvényt követő [1:5] az első öt oszlopot választja ki, nem az első öt sort, mivel egy adatkeret maga is oszlopok listája. Egy lista egyetlen zárójeles indexelése egy kisebb listát ad vissza, és itt ez a kisebb lista továbbra is egy adatkeret.
Az adatkeret szerkezetét az str-vel ellenőrizhetjük:
# Structure of the data
str(df)
output:
## 'data.frame': 714 obs. of 5 variables: ## $ X : int 1 2 3 4 5 6 7 8 9 10 ... ## $ state : int 1 1 1 1 1 1 1 1 1 1 ... ## $ year : int 80 81 82 83 84 85 86 87 88 89 ... ## $ govelec: int 0 0 1 0 0 0 1 0 0 0 ... ## $ black : num 0.256 0.256 0.255 0.255 0.255 ...
Minden változó a számszerű formátum. Az egyes sorokban található $ előtag ugyanaz az operátor, amelyet korábban a névvel ellátott listákon használtak, ami megerősíti, hogy egy adatkeret egyenlő hosszúságú oszlopok listája, amelyek téglalap alakú címkével vannak ellátva. A listaelemek elnevezéséről, kiválasztásáról és törléséről tanultak tehát közvetlenül átvihetők a következőbe: R adattípusok és az adatkeret oszlopaihoz.
