Method untuk Base Generics
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan R di Coddy. Pelajaran 9 dari 57.
Banyak fungsi dalam base R adalah generic S3: print(), format(), summary(), toString(), length(), as.character() dan lainnya. Menambahkan method membuat class-mu bekerja dengan fungsi yang sudah dikenal oleh setiap pengguna R. summary.gradebook() melaporkan keseluruhan object:
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")Output:
3 marks, average 82 Periksa parameter generic sebelum menulis method: summary() menyebut argumen pertamanya object, sedangkan toString() dan format() menyebutnya x. toString() seharusnya mengembalikan satu string:
toString.gradebook <- function(x, ...) paste(x$marks, collapse = " / ")
g <- structure(list(marks = c(70, 85, 91)), class = "gradebook")
print(toString(g))Output:
[1] "70 / 85 / 91"Sebuah method length() mengubah arti length() untuk class tersebut. Queue yang menyimpan itemnya dalam sebuah field dapat melaporkan jumlah item yang disimpannya, bukan jumlah field dalam list:
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))Output:
[1] 2
[1] 3Operator juga merupakan generik. Method bernama "+.money", ditulis dengan tanda kutip karena simbol, dijalankan saat salah satu sisi + adalah object money. Method ini menerima kedua sisi sebagai e1 dan e2:
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)Output:
[1] 12
[1] FALSETantangan
MudahSebuah stack menyimpan itemnya di field items, dengan item teratas berada di posisi terakhir. new_stack(), push(), dan pop() di Stack.R sudah disediakan. Tambahkan tiga method:
length.stack()mengembalikan jumlah item.toString.stack()mengembalikan item dari atas ke bawah yang digabung dengan|, atauempty.summary.stack()mengembalikanstack of 3, top: c, ataustack of 0jika stack kosong.
Kode yang disediakan membaca perintah push <item> dan pop, lalu mencetak panjangnya, toString(), dan summary().
Tulis kodemu di Stack.R. main.R berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
source("Stack.R")
# Kode input/output yang disediakan: biarkan apa adanya
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 = "")
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