Sınıf ile Listeler
Coddy'nin R Journey'sinin Nesne Tabanlı Programlama bölümünün bir parçası. Ders 2 / 57.
S3, R'nin en eski ve en yaygın kullanılan nesne sistemidir. Bir S3 nesnesi, ne tür bir nesne olduğunu belirten bir etiket olan class özniteliğine sahip sıradan bir listedir. class(x) <- "dog" etiketi ayarlar:
rex <- list(name = "Rex", age = 3)
class(rex) <- "dog"
print(class(rex))
cat(rex$name, "is", rex$age)Çıktı:
[1] "dog"
Rex is 3structure() tek bir çağrıda değeri oluşturur ve özniteliklerini ayarlar; bu, bir S3 nesnesi oluşturmanın yaygın yoludur. Alanlar, herhangi bir listedeki gibi $ ile okunur:
rex <- structure(list(name = "Rex", age = 3), class = "dog")
print(class(rex))
print(is.list(rex))
print(rex$age)Çıktı:
[1] "dog"
[1] TRUE
[1] 3Sınıf yalnızca bir etikettir: R, bir nesnenin hangi alanlara sahip olduğunu denetlemez; bu nedenle herhangi bir listeye dog adı verilebilir. unclass() etiketi kaldırır ve düz listeyi geri verir:
p <- structure(list(x = 1, y = 2), class = "point")
print(unclass(p))Çıktı:
$x
[1] 1
$y
[1] 2S3 nesneleri değerlerdir. Bir nesneyi değiştiren işlev kendi kopyasını değiştirir; bu yüzden yeni sürümü döndürür ve çağıran taraf bunu atar. Özgün nesne olduğu gibi kalır:
birthday <- function(d) {
d$age <- d$age + 1
d
}
rex <- structure(list(name = "Rex", age = 3), class = "dog")
older <- birthday(rex)
cat(rex$age, older$age)Çıktı:
3 4Görev
KolayPet.R dosyasındaki make_pet(name, species, age) işlevini tamamla. Bu işlev, name, species ve age alanlarını bu sırayla içeren bir liste ve pet sınıfını döndürür. Ardından, tek bir cümle döndüren describe_pet(p) işlevini tamamla: adı Rex, türü dog, yaşı 3 olan bir evcil hayvan için sonuç Rex is a 3 year old dog olur.
Verilen kod adı, türü ve yaşı okur, evcil hayvanı oluşturur ve sınıfını, alan adlarını ve cümleyi yazdırır.
Kodunu Pet.R dosyasına yaz. main.R verilen girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
source("Pet.R")
# Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
p <- make_pet(input[1], input[2], as.numeric(input[3]))
cat("class: ", class(p), "\n", sep = "")
cat("fields: ", paste(names(p), collapse = ", "), "\n", sep = "")
cat(describe_pet(p), "\n", sep = "")
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Tabanlı Programlama bölümündeki tüm dersler
1S3 Temelleri
Dosyalarla ÇalışmaSınıf ile ListelerYapıcı FonksiyonlarPrint ve Format MetotlarıDoğrulayıcılar ve YardımcılarTekrar - Sıcaklıklar4R'da Kapsülleme
Nesne Olarak Closure'larNesne Olarak OrtamlarErişimci FonksiyonlarDurumu KorumaÖzet - Parkmetre2S3 Generic'leri ve Metotları
Generic'ler ve UseMethodVarsayılan MetotlarTemel Generic'ler için MetotlarNextMethod TemelleriTekrar - Şekil Alanları5S4 Sınıfları
S4 Sınıflarını TanımlamaSlotlar ve ErişimGeçerlilik KontrolleriShow MetotlarıÖzet - Ürün Kataloğu8Referans Sınıfları
Referans Sınıflarını TanımlamaMetotlar ve Alan GüncellemeleriKopyalama SemantiğiKalıtım ve callSuperÖzet - Görev Kuyruğu11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç AlmaKendi başına pratik yap: Online R derleyicisi