R Language
Klassen
Zoeken…
Invoering
De klasse van een data-object bepaalt welke functies de inhoud ervan verwerken. Het class
-kenmerk is een karaktervector en objecten kunnen nul, een of meer klassen hebben. Als er geen class-kenmerk is, is er nog steeds een impliciete klasse die wordt bepaald door de mode
van een object. De klasse kan worden geïnspecteerd met de functie class
en kan worden ingesteld of gewijzigd door de class<-
functie. Het S3-klassensysteem werd al vroeg in de geschiedenis van S opgericht. Het complexere S4-klassensysteem werd later opgericht
Opmerkingen
Er zijn verschillende functies voor het inspecteren van het "type" van een object. De meest nuttige dergelijke functie is class
, hoewel het soms noodzakelijk is om de mode
van een object te onderzoeken. Omdat we het hebben over "types", zou je kunnen denken dat typeof
nuttig zou zijn, maar over het algemeen zal het resultaat van de mode
nuttiger zijn, omdat objecten zonder expliciet "class" -attribuut functieverzending hebben bepaald door de "impliciete klasse" bepaald door hun modus.
vectoren
De meest eenvoudige gegevensstructuur die beschikbaar is in R is een vector. U kunt vectoren van numerieke waarden, logische waarden en tekenreeksen maken met de functie c()
. Bijvoorbeeld:
c(1, 2, 3)
## [1] 1 2 3
c(TRUE, TRUE, FALSE)
## [1] TRUE TRUE FALSE
c("a", "b", "c")
## [1] "a" "b" "c"
U kunt ook deelnemen aan vectoren met de functie c()
.
x <- c(1, 2, 5)
y <- c(3, 4, 6)
z <- c(x, y)
z
## [1] 1 2 5 3 4 6
Een uitgebreidere behandeling van het maken van vectoren is te vinden in het onderwerp "Vectoren maken"
Klassen inspecteren
Aan elk object in R wordt een klasse toegewezen. U kunt class()
gebruiken om de klasse van het object te vinden en str()
om de structuur te zien, inclusief de klassen die het bevat. Bijvoorbeeld:
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"
We zien dat iris de klasse data.frame
en met str()
kunnen we de gegevens erin onderzoeken. De variabele Species in het iris-gegevensframe is van de klassenfactor, in tegenstelling tot de andere variabelen die van klasse numeriek zijn. De functie str()
geeft ook de lengte van de variabelen en toont het eerste paar observaties, terwijl de functie class()
alleen de klasse van het object biedt.
Vectoren en lijsten
Gegevens in R worden opgeslagen in vectoren. Een typische vector is een reeks waarden die allemaal dezelfde opslagmodus hebben (bijv. Tekensvectoren, numerieke vectoren). Zie ?atomic
voor meer informatie over de impliciete atomaire klassen en de bijbehorende opslagmodi: "logical", "integer", "numeric" (synonym "double"), "complex", "character"
en "raw"
. Veel klassen zijn gewoon een atoomvector met een class
bovenaan:
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"
Lijsten zijn een speciaal type vector waarbij elk element van alles kan zijn, zelfs een andere lijst, vandaar de R-term voor lijsten: "recursieve vectoren":
mylist <- list( A = c(5,6,7,8), B = letters[1:10], CC = list( 5, "Z") )
Lijsten hebben twee zeer belangrijke toepassingen:
Aangezien functies slechts één waarde kunnen retourneren, is het gebruikelijk om gecompliceerde resultaten in een lijst te retourneren:
f <- function(x) list(xplus = x + 10, xsq = x^2) f(7) # $xplus # [1] 17 # # $xsq # [1] 49
Lijsten zijn ook de onderliggende fundamentele klasse voor gegevensframes . Onder de motorkap is een gegevensframe een lijst met vectoren die allemaal dezelfde lengte hebben:
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
De andere klasse van recursieve vectoren zijn R-expressies, die "taal" -objecten zijn