Menu
CoddyTech

Sınıf ile Listeler

Coddy'nin R Journey'sinin Nesne Tabanlı Programlama bölümünün bir parçası. Ders 2 / 57.

S3, R'nin en eski ve en yaygın kullanılan nesne sistemidir. Bir S3 nesnesi, ne tür bir nesne olduğunu belirten bir etiket olan class özniteliğine sahip sıradan bir listedir. class(x) <- "dog" etiketi ayarlar:

rex <- list(name = "Rex", age = 3)
class(rex) <- "dog"
print(class(rex))
cat(rex$name, "is", rex$age)

Çıktı:

[1] "dog"
Rex is 3

structure() tek bir çağrıda değeri oluşturur ve özniteliklerini ayarlar; bu, bir S3 nesnesi oluşturmanın yaygın yoludur. Alanlar, herhangi bir listedeki gibi $ ile okunur:

rex <- structure(list(name = "Rex", age = 3), class = "dog")
print(class(rex))
print(is.list(rex))
print(rex$age)

Çıktı:

[1] "dog"
[1] TRUE
[1] 3

Sınıf yalnızca bir etikettir: R, bir nesnenin hangi alanlara sahip olduğunu denetlemez; bu nedenle herhangi bir listeye dog adı verilebilir. unclass() etiketi kaldırır ve düz listeyi geri verir:

p <- structure(list(x = 1, y = 2), class = "point")
print(unclass(p))

Çıktı:

$x
[1] 1

$y
[1] 2

S3 nesneleri değerlerdir. Bir nesneyi değiştiren işlev kendi kopyasını değiştirir; bu yüzden yeni sürümü döndürür ve çağıran taraf bunu atar. Özgün nesne olduğu gibi kalır:

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)

Çıktı:

3 4
challenge icon

Görev

Kolay

Pet.R dosyasındaki make_pet(name, species, age) işlevini tamamla. Bu işlev, name, species ve age alanlarını bu sırayla içeren bir liste ve pet sınıfını döndürür. Ardından, tek bir cümle döndüren describe_pet(p) işlevini tamamla: adı Rex, türü dog, yaşı 3 olan bir evcil hayvan için sonuç Rex is a 3 year old dog olur.

Verilen kod adı, türü ve yaşı okur, evcil hayvanı oluşturur ve sınıfını, alan adlarını ve cümleyi yazdırır.

Kodunu Pet.R dosyasına yaz. main.R verilen girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

source("Pet.R")

# Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
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 iconKendini test et

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

Kendi başına pratik yap: Online R derleyicisi