Modus, Klasse und Typ von R-Objekten

39

Ich habe mich gefragt, was die Unterschiede zwischen Modus, Klasse und Typ von R-Objekten sind. Der Typ eines R-Objekts kann durch die Funktion typeof (), mode by mode () und class by class () ermittelt werden.

Auch irgendwelche anderen ähnlichen Funktionen und Konzepte, die ich vermisst habe?

Danke und Grüße!

Tim
quelle
2
str (variable) ist dein bester Freund.
Brandon Bertelsen
2
Siehe auch R: Fragen zu Typen und Klassen von Variablen zum Stapelüberlauf.
Leo

Antworten:

21

Mit dem class()wird definiert / identifiziert, welcher "Typ" ein Objekt aus Sicht der objektorientierten Programmierung in R ist

> x <- 1:3
> class(x)
[1] "integer"

Jede generische Funktion mit einer "Ganzzahl" -Methode wird verwendet.

typeof()gibt den "Typ" des Objekts aus der Sicht von R an, während mode()der "Typ" des Objekts aus der Sicht von Becker, Chambers & Wilks (1988) angegeben wird. Letzteres ist möglicherweise mit anderen S-Implementierungen gemäß dem R Language Definition- Handbuch besser kompatibel .

Ich würde wahrscheinlich auf der Seite der Verwendung typeof()in den meisten Fällen irren, es sei denn, es war für die Übergabe von R-Objekten an kompilierten Code, wo storage.mode()nützlich sein wird.

Dies wird sinnvollerweise in der oben verlinkten R-Sprachdefinition erörtert.

Setzen Sie Monica - G. Simpson wieder ein
quelle
3
Warum gibt es so viele Sichtweisen? Ich sehe keine Vorteile, aber Verwirrung.
Smwikipedia
1
@smwikipedia, da R ein Erbe hat, das S-Plus und S umfasst und sich letztere Sprache im Laufe der Zeit entwickelt hat. Außerdem muss zwischen den Objekten, die Benutzer erstellen können, und den Basisobjekttypen unterschieden werden.
Setzen Sie Monica - G. Simpson
@smwikipedia denn so ist R eben. Aus dem gleichen Grund haben wir <-und =für die variable Zuordnung.
Andre Terra
9

Von: https://www.mail-archive.com/[email protected]/msg17169.html :

'mode' ist eine sich gegenseitig ausschließende Klassifizierung von Objekten nach ihrer Grundstruktur. Die "atomaren" Modi sind numerisch, komplex, charakterlich und logisch. Rekursive Objekte haben Modi wie 'Liste' oder 'Funktion' oder einige andere. Ein Objekt hat nur einen Modus.

'class' ist eine Eigenschaft, die einem Objekt zugewiesen wird und bestimmt, wie generische Funktionen damit arbeiten. Es ist keine sich gegenseitig ausschließende Klassifikation. Wenn einem Objekt keine bestimmte Klasse zugewiesen ist, z. B. ein einfacher numerischer Vektor, entspricht seine Klasse normalerweise dem Modus.

Das Ändern des Modus eines Objekts wird oft als "Zwang" bezeichnet. Der Modus eines Objekts kann geändert werden, ohne dass die Klasse geändert werden muss.

Bearvarine
quelle
1

Der Hauptunterschied zwischen class und typeof besteht darin, dass der erste vom Benutzer definiert werden kann, der Typ jedoch nicht. Definieren Sie beispielsweise eine Liste

> x<-list("a",c(1,2))

> # x is a list
> class(x)
[1] "list"
> # class can be user defined
> class(x)<-"newclass"
> class(x)
[1] "newclass"

> typeof(x)
[1] "list"
# you cannot assign a different type using typeof()
> typeof(x)<-"newclass"
Error in typeof(x) <- "newclass" : could not find function "typeof<-" 

Es ist sehr nützlich, einem benutzerdefinierten Objekt einen bestimmten Klassennamen zu geben, um Programme zu schreiben. Benutzerdefinierte Objekte können auf ähnliche Weise wie in objektorientierten Programmiersprachen mit Tags versehen werden.

Carlos Ramírez Alvarez
quelle
Laut RDokumentation für typeofund classist die Aussage über "Hauptunterschied" falsch. classist ein Attribut eines Objekts, das unabhängig von seinem internen Speichermodus zugewiesen werden kann, während "typeof den (R-internen) Typ oder den Speichermodus eines Objekts bestimmt". Eine beschreibt eine logische Eigenschaft, während die andere eine physikalische Eigenschaft eines Objekts ist.
whuber