Von der Dokumentation der Klasse POSIXlt ein Objekt der Klasse POSIXlt ist eine benannte Liste. Und tatsächlich:
%Vor% Die Dokumentation der Klassenliste sagt, dass is.list(tm)
ist TRUE, wenn und nur wenn tm
eine Liste oder ein Parallelist ist,
und is.pairlist(tm)
ist TRUE, wenn und nur wenn tm
ein Pairlist oder NULL ist.
Daher muss tm
eine Liste sein.
Aber "list" ist keine Oberklasse von "POSIXlt":
%Vor% extends
negiert die Frage, ob "POSIXlt" die "Liste" erweitert, die Antwort ist nicht einmal "vielleicht":
Außerdem
%Vor% Durch die Dokumentation von is
bedeutet dies Das tm
kann nicht wie von "list" behandelt werden. Insbesondere tm
ist keine Liste.
Aber wenn tm
nicht wie in "list" behandelt werden kann, warum as
es schafft, tm
zu einer Liste zu zwingen?
as(tm.list
ist zweifellos eine Liste, während as.list(tm)
und tm
identisch sind:
as(tm,"list")
hat die Komponenten, die in der Dokumentation der Klasse POSIXlt angegeben sind, aber die Namen sind weg.
Was bedeutet es, eine Liste zu sein? Ist tm
eine Liste oder nicht?
Es ist eine benannte Liste mit einer c("POSIXct", "POSIXt")
-Klasse und einem tzone
-Attribut:
POSIXlt = Benannte Liste + Klasse + Zonenattribut
Tatsächlich können wir ein solches Objekt aus einer benannten Liste L
aufbauen oder herstellen, indem wir das Attribut class
und tzone
wie folgt hinzufügen:
Wir können die benannte Liste L
von tm
wiederherstellen, indem wir das Attribut class
und das Attribut tzone
entfernen:
Bevor ich mit dieser Antwort anfange, würde ich fragen: warum willst du das wissen? Insbesondere denke ich, du könntest hier einen besseren Rat zu einer spezifischeren Frage bekommen: "Ich möchte einen behandeln Objekt des Typs POSIXlt
als Liste im folgenden Kontext: Funktioniert das? Oder sogar: "Unter welchen Umständen bringt die Behandlung eines Objekts vom Typ POSIXlt
als Liste Probleme?" Es ist nicht
Ich denke (aber ich hoffe, dass jemand, der besser informiert ist, einschlägt, in welchem Fall ich das löschen kann), dass du auf einige der düsteren Unterströmungen der R-Objektorientierung gestoßen bist Ältere / eingebaute Klassen folgen nicht immer der ganzen Semantik in der naiv erwarteten Weise (obwohl ausreichend sorgfältiges Lesen der Dokumentation zeigen kann, dass sie technisch korrekt ist). Insbesondere bin ich mir sicher, dass extends()
und is()
für S4-Objekte als (naiv) erwartet werden, ich bin mir weniger sicher über Objekte mit S3-Methoden, und ich bin bezüglich der integrierten Klassen am unsichersten / p>
FWIW data.frame
teilt einige der gleichen Verwirrung: ist es eine Liste oder nicht? (Die Klasse tut extend
listet auf, aber erbt nicht von ihnen ...)