Method Default
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan R di Coddy. Pelajaran 8 dari 57.
Jika tidak ada method yang cocok dengan class tersebut, UseMethod() akan mencari method default, name.default. Method ini menjadi pilihan cadangan untuk setiap class yang tidak dikenal oleh fungsi generik:
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))Output:
[1] "a dog called Rex"
[1] "something I do not know"Tanpa method default, pemanggilan fungsi generik pada class yang tidak dikenal akan berhenti dengan error:
describe <- function(x) UseMethod("describe")
describe.dog <- function(x) paste("a dog called", x$name)
car <- structure(list(), class = "car")
describe(car)Output:
Error in UseMethod("describe") :
no applicable method for 'describe' applied to an object of class "car"
Calls: describe
Execution haltedNilai biasa juga menjalankan dispatch. Angka tanpa atribut class memiliki class implisit numeric, teks memiliki character, dan TRUE memiliki logical, jadi method untuk nama-nama tersebut bekerja pada vektor biasa:
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))Output:
[1] "numbers adding up to 6"
[1] "words: a b"
[1] "something else"method default juga bisa menolak dengan sopan: stop() dengan pesan yang menyebutkan class, sehingga pemanggil tahu apa yang salah. class(x)[1] adalah class pertama dari object:
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")
}Output:
4
cannot compute the area of a blob Tantangan
MudahLengkapi describe(x) generik dan method-methodnya untuk vektor biasa:
describe.numeric()mengembalikan3 numbers, sum 6.describe.character()mengembalikan2 words, longest: apple(kata terpanjang yang muncul pertama jika ada kata dengan panjang yang sama).describe.logical()mengembalikan2 of 3 are TRUE.describe.default()mengembalikansomething else.
Kode yang disediakan membaca baris num 1,2,3, chr apple,kiwi, lgl TRUE,FALSE,TRUE atau kata lain dengan nilai, lalu mengubahnya menjadi list. Kode tersebut mencetak describe() untuk setiap baris.
Tulis kodemu di Describe.R. main.R berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
source("Describe.R")
# Kode input/output yang disediakan: biarkan apa adanya
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 = "")
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Object
1Dasar S3
Bekerja dengan fileList dengan classFungsi KonstruktorMethod print dan formatValidator dan helperUlasan: Suhu4Enkapsulasi di R
Closure sebagai objectEnvironment sebagai objectFungsi accessorMelindungi stateRangkuman: Meter Parkir2S3 Generics dan Method
Generics dan UseMethodMethod DefaultMethod untuk Base GenericsDasar-Dasar NextMethodRekap: Luas Bangun5S4 class
Mendefinisikan class S4Slots dan AksesPemeriksaan ValiditasMethod showRingkasan: Katalog Produk8Kelas Referensi
Mendefinisikan Kelas ReferensiPembaruan method dan fieldSemantik PenyalinanPewarisan dan callSuperRangkuman: Antrean Tugas11Proyek: Manajemen Perpustakaan
Buku dan AnggotaMeminjam BukuLatihan sendiri: Compiler R online