Temel Generic'ler için Metotlar
Coddy'nin R Journey'sinin Nesne Tabanlı Programlama bölümünün bir parçası. Ders 9 / 57.
Temel R'deki birçok işlev S3 generic'idir: print(), format(), summary(), toString(), length(), as.character() ve daha fazlası. Bir yöntem eklemek, sınıfınızın her R kullanıcısının zaten bildiği bir işlevle çalışmasını sağlar. summary.gradebook() bütün bir nesne hakkında rapor verir:
summary.gradebook <- function(object, ...) {
paste0(length(object$marks), " marks, average ", mean(object$marks))
}
g <- structure(list(marks = c(70, 85, 91)), class = "gradebook")
cat(summary(g), "\n")Çıktı:
3 marks, average 82 Yöntemi yazmadan önce generic'in parametrelerini kontrol edin: summary() ilk argümanını object olarak adlandırırken, toString() ve format() onu x olarak adlandırır. toString() tek bir dize döndürmelidir:
toString.gradebook <- function(x, ...) paste(x$marks, collapse = " / ")
g <- structure(list(marks = c(70, 85, 91)), class = "gradebook")
print(toString(g))Çıktı:
[1] "70 / 85 / 91"Bir length() yöntemi, sınıf için length() ifadesinin anlamını değiştirir. Öğelerini bir alanda saklayan bir kuyruk, listedeki alanların sayısı yerine kaç öğe içerdiğini bildirebilir:
q <- structure(list(items = c("a", "b", "c"), name = "jobs"), class = "queue")
print(length(q))
length.queue <- function(x) length(x$items)
print(length(q))Çıktı:
[1] 2
[1] 3Operatörler de jeneriktir. Sembol nedeniyle tırnak işaretleriyle yazılan "+.money" adlı bir yöntem, + işleminin iki tarafından biri money nesnesi olduğunda çalışır. İki tarafı e1 ve e2 olarak alır:
new_money <- function(amount) structure(list(amount = amount), class = "money")
"+.money" <- function(e1, e2) new_money(e1$amount + e2$amount)
"==.money" <- function(e1, e2) e1$amount == e2$amount
a <- new_money(5)
b <- new_money(7)
print((a + b)$amount)
print(a == b)Çıktı:
[1] 12
[1] FALSEGörev
KolayBir yığın, öğelerini items alanında tutar; yığının en üstündeki öğe sondadır. Stack.R içindeki new_stack(), push() ve pop() verilmiştir. Üç yöntem ekleyin:
length.stack()öğe sayısını döndürür.toString.stack()öğeleri yukarıdan aşağıya|ile birleştirilmiş şekilde veyaemptydöndürür.summary.stack()stack of 3, top: cdöndürür; yığın boş olduğundastack of 0döndürür.
Verilen kod, push <item> ve pop komutlarını okur, ardından uzunluğu, toString() ve summary() sonuçlarını yazdırır.
Kodunuz Stack.R dosyasına gider. main.R, verilen girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
source("Stack.R")
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
s <- new_stack()
for (cmd in input) {
if (cmd == "pop") s <- pop(s) else s <- push(s, substring(cmd, 6))
}
cat("length: ", length(s), "\n", sep = "")
cat("items: ", toString(s), "\n", sep = "")
cat(summary(s), "\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