Verschillende datatypen in R
Waarden en variabelen hebben verschillende klassen en datatypen. Voorbeelden zijn getallen (numeric/integer
), woorden (character/string
), boolean (TRUE
of FALSE
). Ook zijn er types zoals matrixen (matrix
), data frames (data frame
), lijsten (list
). Deze types zijn verzamelingen van data.
Ook onze zojuist aangemaakte variabelen hebben een klasse.
R heeft deze automatisch toegewezen. Met de class()
functie kunnen we er achter komen welk datatype een variabele is.
naam <- "Geertje"
class(naam)
## [1] "character"
class(leeftijd)
## Error in eval(expr, envir, enclos): object 'leeftijd' not found
De klasse van de variabele naam
is een character
en leeftijd
is numeric
. Hierbij kun je het character
datatype vergelijken met het string
datatype die je in andere programmeertalen tegenkomt. Het numeric
datatype in R kun je het best vergelijken met het float
datatype die je in andere programmeertalen tegenkomt.
Automatische definitie van datatypen in R
Zoals je misschien hebt gemerkt, hoef je in R niet aan te geven welke klasse een variabele moet krijgen. Dit doet R automatisch. Bij een numerieke waarde weet R namelijk dat het om een numeric
klasse gaat, net als voor bijvoorbeeld een woord of een naam automatisch het character
datatype wordt toegewezen.
Bij andere programmeertalen zoals Java en C# is het nodig om aan te geven welk datatype de nieuwe variabele moet hebben, bijvoorbeeld:
C#:
static string naam = "Arie";
R:
naam <- "Arie"
of
naam = "Arie"
.
Datatypes van variabelen in R veranderen
Het is handig dat R automatisch de klasse definieert. Echter ben je soms niet tevreden met het datatype dat R automatisch toewijst. Daarom kun je in R ook zeer eenvoudig het datatype veranderen. Als wij bijvoorbeeld de variabele leeftijd willen veranderen van numeric
naar character
, gebruiken wij de as.character
-functie.
# de variabele "leeftijd" definiëren
leeftijd <- 26
class(leeftijd)
## [1] "numeric"
#een variabele "leeftijd2" aanmaken die met "string" als datatype
leeftijd2 <- as.character(leeftijd)
leeftijd2
## [1] "26"
class(leeftijd2)
## [1] "character"
Echter kunnen niet alle variabelen naar de gewenste datatype geconverteerd worden. Zo kun je bijvoorbeeld een woord niet omzetten naar een numerieke waarde.
naam <- "David"
# een nieuwe variabele "naam2" aanmaken met een naam geconverteerd naar numeriek
naam2 <- as.numeric(naam)
## Warning: NAs introduced by coercion
class(naam2)
## [1] "numeric"
naam2
## [1] NA
Zoals je kunt zien, krijgen we een waarschuwing (Warning message:
) die aangeeft dat de waarde wegvalt door het omzetten van het datatype.
NA's Wat de waarschuwing letterlijk zegt is: "Er zijn NA's ontstaan, dat staat voor Not Available (lege en onbruikbare waarden), omdat we een character waarde 'dwingen' (coerce) naar een ander datatype". De kans is groot dat je dit later tijdens het analyseren in R tegenkomt. Het is namelijk heel makkelijk om over het hoofd te zien dat we een datatype op een verkeerde manier converteren.
Character
en Numeric
vectoren
Als we een vector leeftijd
willen aanmaken en daar het getal 26
willen toewijzen, gaat dit op dezelfde manier. Nadat de variabele is aangemaakt, kunnen we de waarde die eraan hangt terugvinden door simpelweg de variabele leeftijd
weer in te voeren. Het is namelijk een van de principes van programmeertalen om een toegewezen waarde te onthouden. Zo weet R
in deze sessie dat aan de variabele leeftijd de numerieke waarde 26
is toegewezen. Belangrijk om te weten is dat R
vectoren kan overschrijven. Als we bijvoorbeeld eerst een vector genaamd leeftijd
aanmaken met de waarde 26
en later een vector met dezelfde naam aanmaken met de waarde 44
, wordt alleen 44
onthouden. Hierbij wordt de waarde 26
vergeten en kun je de toewijzing ook nooit meer terugvinden, je kunt het alleen maar opnieuw aanmaken.
leeftijd <- 26
leeftijd
## [1] 26
leeftijd <- 44
leeftijd
## [1] 44
#of
woonplaats <- "Lisse"
# geeft:
woonplaats
## [1] "Lisse"
# nieuw
woonplaats <- "Oldenzaal"
# geeft
woonplaats
## [1] "Oldenzaal"
# voor de duidelijkheid:
woonplaats <- "Amsterdam"
woonplaats <- "Den Haag"
woonplaats
## [1] "Den Haag"
Je kunt zien dat 26
en 44
niet tussen aanhalingstekens (") zijn aangegeven en "Lisse"
wel. Dit komt omdat waarden verschillende types
hebben. Het getal 26
is numeriek en heeft daarom de klasse numeric
. Lisse
is een woord omdat het letters bevat, dit type waarden wordt in programmeertalen een string
genoemd.
Deze verschillende types worden in R een class
genoemd. De belangrijkste en meest gebruikte classes
in R zijn:
Class/datatype: | Eenvoudige beschrijving: | Voorbeeld: |
---|---|---|
numeric |
Numerieke waarden, ook met decimalen. | Huur = 654.67 |
character |
Tekst, alfanumerieke waarden. | Land = Spanje |
logical |
Operatoren zoals TRUE of FALSE waarden. |
2 > 3 = FALSE |
factor |
Character waarden met een volgorde/hiërarchie. | hoog , gemiddeld , laag |