Print ve Format Metotları
Coddy'nin R Journey'sinin Nesne Tabanlı Programlama bölümünün bir parçası. Ders 4 / 57.
Bir değer yazdırıldığında R, print() işlevini çağırır. Sınıf için özel bir şey olmadan, bir S3 nesnesi sınıf özniteliğinin ardından listesini yazdırır; bu da okunmasını zorlaştırır:
m <- structure(list(amount = 9.5, currency = "EUR"), class = "money")
print(m)Çıktı:
$amount
[1] 9.5
$currency
[1] "EUR"
attr(,"class")
[1] "money"Bir metot, generic.class adında bir fonksiyondur. print() sınıfı money olan bir nesne aldığında print.money() fonksiyonunu arar ve bunun yerine onu çağırır. Bir print metodu cat() ile yazdırır ve invisible(x) ile sona erer; böylece nesneyi ikinci kez yazdırmadan geri döndürür:
print.money <- function(x, ...) {
cat("<money ", x$amount, " ", x$currency, ">\n", sep = "")
invisible(x)
}
m <- structure(list(amount = 9.5, currency = "EUR"), class = "money")
print(m)
mÇıktı:
<money 9.5 EUR>
<money 9.5 EUR>format() bir değeri metne dönüştürmek için kullanılan geneldir. Bir format.money() yöntemi, metni yazdırmak yerine döndürür; böylece diğer kodlar onu bir cümleye yerleştirebilir ve print yöntemi onu yeniden kullanabilir:
format.money <- function(x, ...) {
sprintf("%.2f %s", x$amount, x$currency)
}
print.money <- function(x, ...) {
cat("Money:", format(x), "\n")
invisible(x)
}
m <- structure(list(amount = 9.5, currency = "EUR"), class = "money")
m
cat("You owe", format(m), "\n")Çıktı:
Money: 9.50 EUR
You owe 9.50 EUR Bir yöntem, genel işleviyle aynı bağımsız değişkenleri alır. print() ve format(), function(x, ...) olarak tanımlandığından, yöntemleri de x, ... ile başlar. ..., çağıranın geçirebileceği digits gibi ek bağımsız değişkenleri kabul eder. Yöntemler, genel işlevin çağrıldığı her yerde çalışır; örneğin vapply() içinde:
format.money <- function(x, ...) sprintf("%.2f %s", x$amount, x$currency)
wallet <- list(
structure(list(amount = 3, currency = "EUR"), class = "money"),
structure(list(amount = 0.5, currency = "USD"), class = "money")
)
print(vapply(wallet, format, character(1)))Çıktı:
[1] "3.00 EUR" "0.50 USD"Görev
Kolaynew_money(), Money.R dosyasında verilmiştir. Aynı dosyaya iki yöntem ekleyin:
format.money(x, ...), miktarı iki ondalık basamak ve para birimiyle birlikte döndürür:9.50 EUR.print.money(x, ...),format()kullanarak kendi satırında<money 9.50 EUR>yazdırır veinvisible(x)döndürür.
Verilen kod 9.5 EUR satırlarını okur, her para nesnesini yazdırır, ardından tüm biçimlendirilmiş miktarları + ile birleştirerek list: yazdırır.
Kodunuz Money.R dosyasına yazılmalıdır. main.R, verilen girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
source("Money.R")
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
all <- list()
for (line in input) {
p <- strsplit(line, " ")[[1]]
m <- new_money(as.numeric(p[1]), p[2])
print(m)
all[[length(all) + 1]] <- m
}
cat("list: ", paste(vapply(all, format, character(1)), collapse = " + "), "\n", sep = "")
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
1S3 Temelleri
Dosyalarla ÇalışmaSınıf ile ListelerYapıcı FonksiyonlarPrint ve Format MetotlarıDoğrulayıcılar ve YardımcılarTekrar - Sıcaklıklar4R'da Kapsülleme
Nesne Olarak Closure'larNesne Olarak OrtamlarErişimci FonksiyonlarDurumu KorumaÖzet - Parkmetre2S3 Generic'leri ve Metotları
Generic'ler ve UseMethodVarsayılan MetotlarTemel Generic'ler için MetotlarNextMethod TemelleriTekrar - Şekil Alanları5S4 Sınıfları
S4 Sınıflarını TanımlamaSlotlar ve ErişimGeçerlilik KontrolleriShow MetotlarıÖzet - Ürün Kataloğu8Referans Sınıfları
Referans Sınıflarını TanımlamaMetotlar ve Alan GüncellemeleriKopyalama SemantiğiKalıtım ve callSuperÖzet - Görev Kuyruğu11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç AlmaKendi başına pratik yap: Online R derleyicisi