Arten und Klassen von Variablen

84

Zwei R-Fragen:

  1. Was ist der Unterschied zwischen dem Typ (zurückgegeben von typeof) und der Klasse (zurückgegeben von class) einer Variablen? Ist der Unterschied ähnlich wie beispielsweise in der C ++ - Sprache?
  2. Was sind mögliche Arten und Klassen von Variablen?
Löwe
quelle
Dieser verwandte Beitrag könnte auch nützliche Informationen liefern: stackoverflow.com/questions/8855589/…
Dominic Comtois

Antworten:

96

In R hat jedes "Objekt" ein modeund ein class. Ersteres stellt dar, wie ein Objekt im Speicher gespeichert wird (numerisch, Zeichen, Liste und Funktion), während letzteres seinen abstrakten Typ darstellt. Beispielsweise:

d <- data.frame(V1=c(1,2))
class(d)
# [1] "data.frame"
mode(d)
# [1] "list"
typeof(d)
# list

Wie Sie sehen können, werden Datenrahmen im Speicher gespeichert, listaber sie werden in data.frameObjekte eingewickelt . Letzteres ermöglicht die Verwendung von Mitgliedsfunktionen sowie Überladungsfunktionen wie zprint mit einem benutzerdefinierten Verhalten.

typeof( storage.mode) geben normalerweise die gleichen Informationen wie, modeaber nicht immer. Ein typisches Beispiel:

typeof(c(1,2))
# [1] "double"
mode(c(1,2))
# [1] "numeric"

Die Gründe dafür finden Sie hier :

Die R - spezifische Funktion Typeof den Typ eines R - Objekt zurückgibt

Funktionsmodus gibt Auskunft über den Modus eines Objekts im Sinne von Becker, Chambers & Wilks (1988), und ist kompatibel mit anderen Implementierungen der S Sprache

Der Link, den ich oben gepostet habe, enthält auch eine Liste aller nativen R basic types(Vektoren, Listen usw.) und allercompound objects (Faktoren und Datenrahmen) sowie einige Beispiele dafür mode, wie typeofund classfür jeden Typ verwandt sind.

Diliop
quelle
1
"In R hat jedes" Objekt "einen Modus und eine Klasse", solange sie aus der Perspektive der S4-OOP-Klassenstruktur betrachtet werden. In S3 haben Objekte möglicherweise keine Klassennamen zugewiesen:oldClass(matrix(1:10, 2,5)) # NULL
Erdogan CEVHER
6

typebezieht sich wirklich auf die verschiedenen Datenstrukturen, die in R verfügbar sind. Diese Diskussion im Handbuch zur R-Sprachdefinition kann Ihnen den Einstieg in Objekte und Typen erleichtern.

Auf der anderen Seite classbedeutet etwas anderes in R als das, was Sie vielleicht erwarten. Aus dem Handbuch zur R-Sprachdefinition (das mit Ihrer Version von R geliefert wurde):

2.2.4 Klassen

R hat ein ausgeklügeltes Klassensystem 1 , das hauptsächlich über das Klassenattribut gesteuert wird. Dieses Attribut ist ein Zeichenvektor, der die Liste der Klassen enthält, von denen ein Objekt erbt. Dies bildet die Grundlage für die Funktionalität der „generischen Methoden“ in R.

Auf dieses Attribut kann praktisch ohne Einschränkung durch Benutzer zugegriffen und es bearbeitet werden. Es wird nicht überprüft, ob ein Objekt tatsächlich die Komponenten enthält, die Klassenmethoden erwarten. Daher sollte das Ändern des Klassenattributs mit Vorsicht erfolgen, und wenn sie verfügbar sind, sollten bestimmte Erstellungs- und Zwangsfunktionen bevorzugt werden.

Dirk Eddelbuettel
quelle