Varsayılan Metotlar
Coddy'nin R Journey'sinin Nesne Tabanlı Programlama bölümünün bir parçası. Ders 8 / 57.
Hiçbir yöntem sınıfla eşleşmediğinde, UseMethod() varsayılan yöntemi olan name.default'u arar. Bu, generic'in bilmediği her sınıf için geri dönüş yöntemidir:
describe <- function(x) UseMethod("describe")
describe.dog <- function(x) paste("a dog called", x$name)
describe.default <- function(x) "something I do not know"
rex <- structure(list(name = "Rex"), class = "dog")
car <- structure(list(), class = "car")
print(describe(rex))
print(describe(car))Çıktı:
[1] "a dog called Rex"
[1] "something I do not know"Varsayılan bir yöntem olmadan, bilinmeyen bir sınıf üzerinde jenerik işlevi çağırmak bir hatayla durur:
describe <- function(x) UseMethod("describe")
describe.dog <- function(x) paste("a dog called", x$name)
car <- structure(list(), class = "car")
describe(car)Çıktı:
Error in UseMethod("describe") :
no applicable method for 'describe' applied to an object of class "car"
Calls: describe
Execution haltedDüz değerler de gönderim yapar. Sınıf özniteliği olmayan bir sayı örtük sınıf olarak numeric değerine, metin character değerine ve TRUE ise logical değerine sahiptir; bu nedenle bu adlara sahip metotlar sıradan vektörler üzerinde çalışır:
describe <- function(x) UseMethod("describe")
describe.numeric <- function(x) paste("numbers adding up to", sum(x))
describe.character <- function(x) paste("words:", paste(x, collapse = " "))
describe.default <- function(x) "something else"
print(describe(c(1, 2, 3)))
print(describe(c("a", "b")))
print(describe(TRUE))Çıktı:
[1] "numbers adding up to 6"
[1] "words: a b"
[1] "something else"Varsayılan bir yöntem de kibarca reddedebilir: çağıranın neyin yanlış gittiğini bilmesi için sınıfı belirten bir iletiyle stop(). class(x)[1], nesnenin ilk sınıfıdır:
area <- function(shape) UseMethod("area")
area.square <- function(shape) shape$side^2
area.default <- function(shape) {
stop("cannot compute the area of a ", class(shape)[1], call. = FALSE)
}
for (s in list(structure(list(side = 2), class = "square"), structure(list(), class = "blob"))) {
cat(tryCatch(area(s), error = function(e) conditionMessage(e)), "\n")
}Çıktı:
4
cannot compute the area of a blob Görev
KolayGenel describe(x) işlevini ve düz vektörler için yöntemlerini Describe.R içinde tamamla:
describe.numeric(),3 numbers, sum 6döndürür.describe.character(),2 words, longest: appledöndürür (eşitlik durumunda en uzun sözcüklerin ilkini).describe.logical(),2 of 3 are TRUEdöndürür.describe.default(),something elsedöndürür.
Sağlanan kod, satırları num 1,2,3, chr apple,kiwi, lgl TRUE,FALSE,TRUE veya değerler içeren başka herhangi bir sözcük biçiminde okur ve bunları bir listeye dönüştürür. Her biri için describe() çıktısını yazdırır.
Kodun Describe.R içinde yer almalıdır. main.R, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
source("Describe.R")
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
for (line in input) {
p <- strsplit(line, " ")[[1]]
values <- strsplit(p[2], ",")[[1]]
x <- switch(p[1],
num = as.numeric(values),
chr = values,
lgl = as.logical(values),
list(values))
cat(describe(x), "\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