R Programlamada Listeler: Eleman Oluşturma ve Seçme
⚡ Akıllı Özet
R List, vektörleri, matrisleri, veri çerçevelerini ve hatta diğer listeleri tek bir kapsayıcı içinde depolayan bir nesnedir. `list()` fonksiyonu onu oluşturur ve çift köşeli parantezler herhangi bir öğeyi geri çeker.

R Listesi nedir?
R Listesi R programlamada matrisleri, vektörleri, veri çerçevelerini veya listeleri içeren bir nesnedir. R List aynı zamanda bir nesne koleksiyonunu depolamak ve ihtiyaç duyduğumuzda kullanmak için de kullanılır. R listesini pek çok farklı eşyanın konulabileceği bir çanta gibi düşünebiliriz. Bir eşyayı kullanmamız gerektiğinde çantayı açıp kullanabiliyoruz.
Vektörle olan zıtlık, çantayı kullanışlı kılan şeydir. Vektör, her öğeyi tek bir türe zorlar, bu nedenle bir kelimeyi bir sayının yanına koymak, sayıyı metne dönüştürür. Liste böyle bir kural uygulamaz, bu nedenle beş elemanlı bir vektörü, iki satırlı bir listeyi taşıyabilir. matris ve 714 satırlık bir veri çerçevesini, hiçbirini değiştirmeden yan yana koyduk.
R'de Listenin Sözdizimi
R programlama dilinde listeler oluşturmak için `list()` fonksiyonunu kullanabiliriz:
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
Her argüman, olduğu gibi veya şu biçimde sunulabilir: etiket = değer. İsimsiz bir argüman, yalnızca numarasıyla erişilebilen konumlu bir öğe haline gelirken, etiketli bir argüman ayrıca bir isim de kazanır. Temel R referansı için liste() Belgeler hem formları hem de notları içerir ve unlist() fonksiyonunun as.list() fonksiyonunun yaklaşık tersi gibi davrandığını belirtir.
R'de Liste Nasıl Oluşturulur
Aşağıda R'de bir listenin nasıl oluşturulacağına ilişkin adım adım bir süreç verilmiştir:
Aşağıdaki örnekte bir Vector, bir Matrix ve bir Matrix olmak üzere üç farklı nesne oluşturacağız. Veri çerçevesi R'de liste işlevini kullanma.
Adım 1) Bir Vektör Oluşturun
R'de bir vektör oluşturmak için aşağıdaki kodu kullanın
# Vector with numeric from 1 up to 5
vect <- 1:5
İki nokta üst üste operatörü, 1, 2, 3, 4, 5 dizisini bir tamsayı vektörü olarak oluşturur ve atama oku bunu vect adı altında saklar.
Adım 2) Bir Matris Oluşturun
Şimdi, aşağıdaki kodu kullanarak bir matris oluşturun.
# A 2x 5 matrix
mat <- matrix(1:9, ncol = 5)
dim(mat)
Burada iki ayrıntıya dikkat çekmek gerekiyor. İki satır ve beş sütundan oluşan bir tablo on değere ihtiyaç duyarken, yalnızca dokuz değer sağlandığı için R, diziyi yeniden kullanır ve veri uzunluğunun satır sayısının alt katı olmadığına dair bir uyarı yazdırır. Bu yeniden kullanılan değer, yazdırılan matrisin ikinci satırının 10 yerine 1 ile bitmesinin nedenidir. Ardından dim() çağrısı şekli rapor eder.
Çıktı:
## [1] 2 5
Adım 3) Veri Çerçevesi Oluşturun
Aşağıdaki kodu kullanarak R'de bir veri çerçevesi oluşturun
# select the 10th row of the built-in R data set EuStockMarkets
df <- EuStockMarkets[1:10,]
Yorumda onuncu satırdan bahsediliyor, ancak ifade, yerleşik EuStockMarkets serisinin 1'den 10'a kadar olan satırlarını koruyor. Alt kümeleme ayrıca zaman serisi sınıfını da kaldırıyor, bu nedenle geri dönen şey gerçek bir veri çerçevesi yerine sayısal bir matris oluyor; bu da aşağıda yazdırılan sonucun satır adları yerine [1,] stili satır etiketleri taşımasının tam olarak nedenidir. Gerçek bir veri çerçevesine ihtiyaç duyulduğunda çağrıyı as.data.frame() içine alın.
Adım 4) R'de Liste Oluşturun
Şimdi aşağıdaki kodu kullanarak üç nesneyi R listesine koyabiliriz.
# Construct list with these vec, mat, and df:
my_list <- list(vect, mat, df)
my_list
Çıktı:
## [[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
Çıktıdaki üç çift köşeli parantez başlığı, liste pozisyonlarını gösterir. Hiçbir şey düzleştirilmedi veya dönüştürülmedi: birinci eleman hala bir tamsayı vektörü, ikinci eleman hala bir matris ve üçüncü eleman hala hisse senedi fiyatlarının on satırının tamamını içeriyor.
R Listesinden Elemanları Seçin
Listemizi oluşturduktan sonra, ona oldukça kolay bir şekilde erişebiliriz. Listedeki bir öğeyi seçmek için [[index]] kullanmamız gerekiyor. Çift köşeli parantez içindeki değer, listeden çıkarmak istediğimiz öğenin konumunu temsil eder.tracÖrneğin, parantez içine 2 yazdığımızda, R listedeki ikinci öğeyi döndürür.
Şimdi bunda R öğreticisi, R'deki my_list adlı listenin ikinci öğelerini seçmeye çalışalım, my_list[[2]] kullanıyoruz
# Print second element of the list
my_list[[2]]
Çıktı:
## [,1] [,2] [,3] [,4] [,5] ## [1,] 1 3 5 7 9 ## [2,] 2 4 6 8 1
Tek ve çift parantezler birbirinin yerine kullanılamaz ve bunların karıştırılması liste hatalarının en yaygın nedenidir. Tek parantez sarmalayıcıyı korurken, iki parantez onu kaldırır.
| ifade | Geri dönen şey | Sonucun sınıfı | Bunu ne zaman kullanacaksın? |
|---|---|---|---|
| benim_listem[[2]] | Saklanan öğenin kendisi | Burada ne saklanırsa saklansın, bir matris | Tek bir eleman üzerinde hesaplama yapmanız gerekiyor. |
| benim_listem[2] | O öğeyi içeren bir alt liste | liste | Liste sarmalayıcısını korumanız gerekiyor. |
| benim_listem[c(1, 3)] | Seçilen öğelerin alt listesi | liste | Birkaç öğeye aynı anda ihtiyacınız var. |
| benim_listem[-2] | İkinci hariç her öğe | liste | Bir öğeyi silmeniz gerekiyor. |
# 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]
R'de Adlandırılmış Listeler
Konumsal indeksler kırılgandır: bir öğe eklediğinizde, ondan sonraki her sayı kayar. Öğeleri adlandırmak bu riski ortadan kaldırır ve kodun tanımladığı veriler gibi okunmasını sağlar. İsimler liste oluşturulurken verilebilir veya sonradan names() fonksiyonu ile eklenebilir.
# 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"
$ operatörü ve çift parantez, yeni başlayanları yanıltan bir açıdan farklılık gösterir. $ operatörü kısmi eşleştirme yapar, bu nedenle named_list$pri hala fiyatları bulurken, named_list[[“pri”]] NULL döndürür çünkü çift parantez tam olarak eşleşir, ancak exact = FALSE parametresi geçirilmediği sürece. Kısmi eşleştirme konsolda kullanışlıdır ancak bir betikte güvenli değildir, bu nedenle kaydedilmiş kodda tam eşleşmeyi tercih edin.
# A compact map of the whole structure
str(named_list)
`str()` fonksiyonu, her öğe için türünü ve boyutunu içeren tek bir satır yazdırır; bu, bir listeye indeksleme yapmadan önce listenin beklediğiniz içeriği içerip içermediğini doğrulamanın en hızlı yoludur.
R listesindeki öğeleri değiştirme, ekleme ve silme
Bir liste oluşturulduktan sonra sabit kalmaz. Bir öğeyi okuyan erişimciler aynı zamanda ona yazma işlemi de yaparlar; bu nedenle bir listeyi güncelleme, genişletme ve küçültme işlemlerinin tümü normal atama yöntemini kullanır.
# 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
- Değiştirin: Mevcut bir isme atama işlemi, o öğenin üzerine yazılır ancak konumu değişmez.
- ekle: Var olmayan bir isme değer atamak, listenin sonuna yeni bir öğe ekler.
- Ekle: `append()` fonksiyonu ikinci argüman olarak bir liste alır, bu nedenle doğrudan değeri `list()` içine alıp ardından iletin.
- Sil: Çift köşeli parantez içinde NULL değeri atamak, öğeyi kaldırır ve listeyi kısaltır.
İnsanların sıklıkla takıldığı bir sonuç şudur: NULL silme anlamına geldiğinden, çift köşeli parantez içinde gerçek bir NULL değeri saklayamazsınız. Bunun yerine, named_list["empty"] <- list(NULL) örneğinde olduğu gibi tek köşeli parantez ataması kullanın; bu, alanı korur ve içine NULL değerini yerleştirir.
R'de İç İçe Listeler ve unlist()
Bir liste herhangi bir R nesnesini içerebileceğinden, başka bir listeyi de içerebilir. Yapılandırma nesneleri, JSON yanıtları ve model sonuçları genellikle R'da iç içe geçmiş şekilde temsil edilir; bu nedenle iç içe geçmiş bir listeye erişmek ve onu düzleştirmek günlük işlerdir.
# 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)
Düzleştirmenin anlaşılması gereken bir maliyeti vardır. `unlist()` tek bir atomik vektör döndürmelidir, bu nedenle her değeri mantıksal, tamsayı, ondalık sayı, karakter sırasıyla en genel türe dönüştürür. Bu nedenle, sayıları metinle karıştıran iç içe bir liste tamamen metin olarak geri döner. Sonuçtaki adlar, dış ve iç etiketlerin birleştirilmesiyle oluşturulur; bu nedenle bir öğe `owner` yerine `meta.owner` olarak gelir.
Bileşik adlar istenmiyorsa `use.names = FALSE` değerini, yalnızca en dış katmanın kaldırılması gerekiyorsa `recursive = FALSE` değerini geçirin. Değerlerin türlerini koruması gerekiyorsa, yapıyı olduğu gibi bırakın ve düzleştirmek yerine liste üzerinde işlem yapın.
R'de Yerleşik Veri Çerçevesi
Listeler genellikle diskten veya web'den okunan verilerle doldurulur, bu nedenle bir veri çerçevesinin içine kaydedilmeden önce nasıl oluşturulduğunu görmek faydalıdır. Kendi veri çerçevemizi oluşturmadan önce, çevrimiçi olarak bulunan R veri setine göz atabiliriz. Hapishane veri seti 714×5 boyutundadır. `tail()` fonksiyonu ile veri çerçevesinin alt kısmına hızlıca göz atabiliriz. Benzer şekilde, `head()` fonksiyonu veri çerçevesinin üst kısmını görüntüler. `head(df, 5)` ile gösterilecek satır sayısını belirtebilirsiniz. `read.csv()` fonksiyonu hakkında daha fazla bilgiyi ilerleyen bölümlerde öğreneceğiz. R'de veri içe aktarma öğretici.
PATH <-'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/prison.csv'
df <- read.csv(PATH)[1:5]
head(df, 5)
Çıktı:
## 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
read.csv()'yi takip eden [1:5] ifadesi, ilk beş satırı değil, ilk beş sütunu seçer; çünkü veri çerçevesi kendi içinde sütunlardan oluşan bir listedir. Bir listede tek köşeli parantez indeksleme daha küçük bir liste döndürür ve burada bu daha küçük liste hala bir veri çerçevesidir.
Veri çerçevesinin yapısını str ile kontrol edebiliriz:
# Structure of the data
str(df)
Çıktı:
## '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 ...
Tüm değişkenler depolanır sayısal Her satırdaki "$" öneki, daha önce adlandırılmış listelerde kullanılan operatörle aynıdır ve bir veri çerçevesinin dikdörtgen bir etiket taşıyan eşit uzunlukta sütunlardan oluşan bir liste olduğunu doğrular. Bu nedenle, liste öğelerini adlandırma, seçme ve silme hakkında öğrenilen her şey doğrudan buraya aktarılır. R veri tipleri ve veri çerçevesi sütunlarına.
