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. 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() değeri oluşturur ve özniteliklerini tek bir çağrıda ayarlar; bu, bir S3 nesnesi oluşturmanın yaygın yoludur. Alanlar, herhangi bir listede olduğu 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 bir işlev kendi kopyasını değiştirir; bu nedenle yeni sürümü döndürür ve çağıran kişi bunu atar. Orijinal 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
Kolaymake_pet(name, species, age) işlevini Pet.R içinde tamamla. Bu işlev, name, species ve age alanlarını bu sırayla ve pet sınıfını içeren bir liste döndürür. Ardından, tek bir cümle döndüren describe_pet(p) işlevini tamamla: adı Rex, türü dog ve yaşı 3 olan bir evcil hayvan için sonuç Rex is a 3 year old dog olur.
Sağlanan 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.
Kodun Pet.R içine yazılmalıdır. main.R, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
source("Pet.R")
# Sağlanan girdi/çıktı 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