Show-Methoden
Teil des Abschnitts Objektorientierte Programmierung der R-Journey von Coddy. Lektion 25 von 57.
Wenn ein S4-Objekt ausgegeben wird, ruft R die Funktion show() auf. Ohne eine Methode für die Klasse listet sie jeden Slot auf, was zwar korrekt, aber lang ist:
setClass("Point", slots = c(x = "numeric", y = "numeric"))
p <- new("Point", x = 1, y = 2)
pAusgabe:
An object of class "Point"
Slot "x":
[1] 1
Slot "y":
[1] 2setMethod("show", "Point", function(object) ...) verleiht der Klasse eine eigene Ausgabe. Die Methode gibt mit cat() aus und wird sowohl verwendet, wenn ein Objekt auf der obersten Ebene ausgegeben wird, als auch von print():
setClass("Point", slots = c(x = "numeric", y = "numeric"))
setMethod("show", "Point", function(object) {
cat("Point(", object@x, ", ", object@y, ")\n", sep = "")
})
p <- new("Point", x = 1, y = 2)
p
print(p)Ausgabe:
Point(1, 2)
Point(1, 2)Ein Slot kann ein anderes S4-Objekt enthalten: Deklariere seinen Typ als den Klassennamen. Die äußere show()-Methode kann das innere Objekt ausgeben, indem sie show() darauf aufruft:
setClass("Point", slots = c(x = "numeric", y = "numeric"))
setMethod("show", "Point", function(object) cat("(", object@x, ", ", object@y, ")", sep = ""))
setClass("Line", slots = c(from = "Point", to = "Point"))
setMethod("show", "Line", function(object) {
cat("line ")
show(object@from)
cat(" -> ")
show(object@to)
cat("\n")
})
new("Line", from = new("Point", x = 0, y = 0), to = new("Point", x = 3, y = 4))Ausgabe:
line (0, 0) -> (3, 4)Eine virtuelle Klasse, die mit representation("VIRTUAL") deklariert wird, kann nicht mit new() erstellt werden. Sie dient als gemeinsames übergeordnetes Element für andere Klassen, worauf das Kapitel zur S4-Vererbung aufbaut. isVirtualClass() unterscheidet zwischen den beiden Arten:
setClass("Shape", representation("VIRTUAL"))
setClass("Point", slots = c(x = "numeric"))
cat(isVirtualClass("Shape"), isVirtualClass("Point"), "\n")
msg <- tryCatch(new("Shape"), error = function(e) "cannot create a Shape")
cat(msg, "\n")Ausgabe:
TRUE FALSE
cannot create a Shape Aufgabe
EinfachPunkte und Segmente sind zwei S4-Klassen in zwei Dateien. Die Klassen sind deklariert. Füge ihre show()-Methoden hinzu:
- In
Point.R: Ein Punkt wird alsPoint(1, 2)gefolgt von einem Zeilenumbruch ausgegeben. - In
Segment.R: Ein Segment wird alsSegment Point(1, 2) to Point(4, 6), length 5gefolgt von einem Zeilenumbruch ausgegeben, wobei die Länge auf zwei Dezimalstellen gerundet wird. Erzeuge den Punkttext selbst oder mit einer Hilfsfunktion; die Punktmethode gibt ihren eigenen Zeilenumbruch aus, rufe sie daher nicht mitten in der Segmentzeile auf.
Der bereitgestellte Code liest Zeilen 1,2 4,6, gibt den ersten Punkt und anschließend das Segment aus, beides über ihre show()-Methoden.
Dein Code gehört in Point.R und Segment.R. main.R enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.
Probier es selbst
source("Point.R")
source("Segment.R")
# Bereitgestellter Ein-/Ausgabe-Code: belasse ihn unverändert
input <- suppressWarnings(readLines(file("stdin")))
for (line in input) {
n <- as.numeric(strsplit(line, "[ ,]")[[1]])
a <- new("Point", x = n[1], y = n[2])
b <- new("Point", x = n[3], y = n[4])
print(a)
print(new("Segment", from = a, to = b))
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1S3-Grundlagen
Arbeiten mit DateienListen mit einer KlasseKonstruktorfunktionenPrint- und Format-MethodenValidatoren und HilfsfunktionenRückblick – Temperaturen4Kapselung in R
Closures als ObjekteUmgebungen als ObjekteZugriffsfunktionenZustand schützenRückblick – Parkuhr2S3-Generics und Methoden
Generics und UseMethodStandardmethodenMethoden für Basis-GenericsGrundlagen von NextMethodWiederholung – Flächeninhalte von Formen5S4-Klassen
S4-Klassen definierenSlots und ZugriffGültigkeitsprüfungenShow-MethodenRückblick – Produktkatalog8Referenzklassen
Referenzklassen definierenMethoden und FeldänderungenKopiersemantikVererbung und callSuperZusammenfassung – Aufgabenwarteschlange11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Online-R-Compiler