R Language
Klassen
Suche…
Einführung
Die Klasse eines Datenobjekts bestimmt, welche Funktionen seinen Inhalt verarbeiten. Das class
ist ein Zeichenvektor, und Objekte können null, eine oder mehrere Klassen haben. Wenn kein Klassenattribut vorhanden ist, gibt es immer noch eine implizite Klasse, die vom mode
eines Objekts bestimmt wird. Die Klasse kann mit der Funktion überprüft werden class
und es kann durch die Menge oder modifiziert werden class<-
Funktion. Das S3-Klassensystem wurde bereits in der Geschichte von S etabliert. Das komplexere S4-Klassensystem wurde später eingeführt
Bemerkungen
Es gibt mehrere Funktionen, um den "Typ" eines Objekts zu prüfen. Die nützlichste solche Funktion ist die class
, obwohl manchmal der mode
eines Objekts untersucht werden muss. Da wir über "Typen" sprechen, könnte man denken, dass typeof
nützlich sein würde, im Allgemeinen ist das Ergebnis des mode
jedoch nützlicher, da für Objekte ohne explizites "class" -Attribut der Funktions-Dispatch durch die "implizite Klasse" bestimmt wird von ihrem Modus.
Vektoren
Die einfachste in R verfügbare Datenstruktur ist ein Vektor. Sie können mit der Funktion c()
Vektoren aus numerischen Werten, logischen Werten und Zeichenketten erstellen. Zum Beispiel:
c(1, 2, 3)
## [1] 1 2 3
c(TRUE, TRUE, FALSE)
## [1] TRUE TRUE FALSE
c("a", "b", "c")
## [1] "a" "b" "c"
Sie können auch mit der Funktion c()
Verknüpfung zu Vektoren herstellen.
x <- c(1, 2, 5)
y <- c(3, 4, 6)
z <- c(x, y)
z
## [1] 1 2 5 3 4 6
Eine ausführlichere Vorgehensweise zum Erstellen von Vektoren finden Sie im Thema "Erstellen von Vektoren"
Überprüfen Sie die Klassen
Jedem Objekt in R wird eine Klasse zugewiesen. Sie können class()
, um die Klasse des Objekts zu finden, und str()
, um die Struktur einschließlich der darin enthaltenen Klassen anzuzeigen. Zum Beispiel:
class(iris)
[1] "data.frame"
str(iris)
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 ...
class(iris$Species)
[1] "factor"
Wir sehen, dass Iris die Klasse data.frame
und mit str()
können wir die darin enthaltenen Daten untersuchen. Die Variable Species im Iris-Datenrahmen hat im Gegensatz zu den anderen Variablen, die klassennumerisch sind, einen Klassenfaktor. Die Funktion str()
gibt auch die Länge der Variablen an und zeigt die ersten Beobachtungen, während die Funktion class()
nur die Klasse des Objekts bereitstellt.
Vektoren und Listen
Daten in R werden in Vektoren gespeichert. Ein typischer Vektor ist eine Folge von Werten, die alle den gleichen Speichermodus haben (z. B. Zeichenvektoren, numerische Vektoren). Weitere Informationen zu den atomaren impliziten Klassen und den entsprechenden Speichermodi finden Sie unter ?atomic
: "logical", "integer", "numeric" (synonym "double"), "complex", "character"
und "raw"
. Viele Klassen sind einfach ein atomarer Vektor mit einem class
oben:
x <- 1826
class(x) <- "Date"
x
# [1] "1975-01-01"
x <- as.Date("1970-01-01")
class(x)
#[1] "Date"
is(x,"Date")
#[1] TRUE
is(x,"integer")
#[1] FALSE
is(x,"numeric")
#[1] FALSE
mode(x)
#[1] "numeric"
Listen sind ein spezieller Vektortyp, bei dem jedes Element alles sein kann, sogar eine andere Liste, daher der R-Ausdruck für Listen: "Rekursivvektoren":
mylist <- list( A = c(5,6,7,8), B = letters[1:10], CC = list( 5, "Z") )
Listen haben zwei sehr wichtige Zwecke:
Da Funktionen nur einen einzelnen Wert zurückgeben können, werden häufig komplizierte Ergebnisse in einer Liste zurückgegeben:
f <- function(x) list(xplus = x + 10, xsq = x^2) f(7) # $xplus # [1] 17 # # $xsq # [1] 49
Listen sind auch die zugrunde liegende grundlegende Klasse für Datenrahmen . Unter der Haube ist ein Datenrahmen eine Liste von Vektoren, die alle die gleiche Länge haben:
L <- list(x = 1:2, y = c("A","B")) DF <- data.frame(L) DF # x y # 1 1 A # 2 2 B is.list(DF) # [1] TRUE
Die andere Klasse rekursiver Vektoren sind R-Ausdrücke, die "Sprachobjekte" sind