Ist ein R-Objekt der Klasse "POSIXlt" eine "Liste" oder nicht?

8

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.

%Vor%

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":

%Vor%

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:

%Vor%

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?

    
mra68 24.12.2015, 15:29
quelle

2 Antworten

7

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:

%Vor%

Wir können die benannte Liste L von tm wiederherstellen, indem wir das Attribut class und das Attribut tzone entfernen:

%Vor%     
G. Grothendieck 24.12.2015 15:43
quelle
4

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 Um nach der formalen Semantik von R zu fragen, werden Sie wahrscheinlich feststellen, dass es etwas trübe ist.

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 ...)

%Vor%     
Ben Bolker 24.12.2015 15:40
quelle

Tags und Links