Menu
CoddyTech

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 3

structure() 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] 3

class 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] 2

object 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 4
challenge icon

Tantangan

Mudah

Lengkapi 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 = "")
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler R online