List dengan class
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan R di Coddy. Pelajaran 2 dari 57.
S3 adalah sistem object tertua dan paling banyak digunakan di R. Object S3 adalah list biasa dengan atribut class, sebuah label yang menunjukkan jenis object tersebut. class(x) <- "dog" menetapkan labelnya:
rex <- list(name = "Rex", age = 3)
class(rex) <- "dog"
print(class(rex))
cat(rex$name, "is", rex$age)Output:
[1] "dog"
Rex is 3structure() membangun nilai dan menetapkan atributnya dalam satu pemanggilan, yang merupakan cara umum untuk membuat object S3. Field dibaca dengan $ seperti pada list apa pun:
rex <- structure(list(name = "Rex", age = 3), class = "dog")
print(class(rex))
print(is.list(rex))
print(rex$age)Output:
[1] "dog"
[1] TRUE
[1] 3class hanya label: R tidak memeriksa field apa yang dimiliki sebuah object, jadi list apa pun bisa disebut dog. unclass() menghapus label dan mengembalikan list biasa:
p <- structure(list(x = 1, y = 2), class = "point")
print(unclass(p))Output:
$x
[1] 1
$y
[1] 2object S3 adalah nilai. Fungsi yang mengubah object mengubah salinannya sendiri, jadi fungsi tersebut mengembalikan versi baru dan pemanggil menetapkannya. Versi aslinya tetap seperti semula:
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)output:
3 4Tantangan
MudahLengkapi make_pet(name, species, age) di Pet.R. Fungsi ini mengembalikan sebuah list dengan field name, species, dan age, dalam urutan tersebut, serta class pet. Lalu lengkapi describe_pet(p), yang mengembalikan satu kalimat: hewan peliharaan bernama Rex, spesies dog, berusia 3 tahun menghasilkan Rex is a 3 year old dog.
Kode yang disediakan membaca nama, spesies, dan usia, membuat hewan peliharaan, lalu mencetak class-nya, nama field-nya, dan kalimat tersebut.
Tulis kodemu di Pet.R. main.R berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
source("Pet.R")
# Kode input/output yang disediakan: biarkan apa adanya
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 = "")
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