Datatyper i R med eksempel
โก Smart opsummering
Datatyper i R definerer, hvordan vรฆrdier gemmes i hukommelsen, og operatorer bestemmer, hvad R kan gรธre med dem. Vektorer, variabler, aritmetiske, relationelle, logiske og tildelingsoperatorer dรฆkkes her med eksempler, der kan kรธres.
Hvad er datatyperne i R?
Fรธlgende er datatyperne eller datastrukturerne i R-programmering:
- Skalarer
- Vektorer (numerisk, karakter, logisk)
- Matricer
- Datarammer
- Lister
Den liste blander to relaterede idรฉer, og ved at adskille dem bliver resten af โโsiden lettere at fรธlge. datatype beskriver, hvad en enkelt vรฆrdi er โ et tal, et stykke tekst, en SAND eller en FALSK. En datastruktur beskriver, hvor mange vรฆrdier der holdes sammen, og i hvilken form. Skalarer, vektorer, matricer, datarammer og lister er strukturer; vรฆrdierne i dem tilhรธrer stadig en af โโR's grundtyper.
| Struktur | Mรฅl | Blandede typer tilladt? | Typisk brug |
|---|---|---|---|
| Skalar | Lรฆngde-1 vektor | Ingen | En enkelt mรฅling eller et flag |
| vektor | 1 | Ingen | En kolonne med aflรฆsninger af รฉn type |
| Matrix | 2 | Ingen | Numeriske gitre og lineรฆr algebra |
| Dataramme | 2 | Ja, รฉn type pr. kolonne | Tabeldatasรฆt |
| Liste | 1, men kan indbygges | Ja, alt pr. element | Modelresultater og blandede containere |
R har ingen separat skalartype: en skalar er simpelthen en vektor med lรฆngden รฉn, hvilket er grunden til, at sรฅ meget R-kode skrives for hele vektorer pรฅ รฉn gang.
Grundlรฆggende datatyper i R
Enhver vรฆrdi i R tilhรธrer en af โโet lille sรฆt af grundlรฆggende (atomare) typer:
- 4.5 er en decimalvรฆrdi kaldet numerisk.
- 4 ligner et helt tal, men R gemmer det stadig som et dobbelttal. Skriv 4L, nรฅr et รฆgte heltal er pรฅkrรฆvet.
- SAND eller FALSK er en boolsk vรฆrdi, kaldet en logisk vรฆrdi i R.
- Vรฆrdien i " " eller ' ' er tekst (en streng). Disse vรฆrdier kaldes tegn.
To yderligere typer fuldender sรฆttet. Komplekse vรฆrdier som 3+2i indeholder en reel og en imaginรฆr del, og rรฅ vรฆrdier indeholder bytes. Begge optrรฆder sjรฆldent i daglig analyse, men de er angivet i basis-R. typeof() dokumentation sammen med de fire almindelige typer.
| Type | Eksempelvรฆrdi | class() returnerer | typeof() returnerer |
|---|---|---|---|
| Logisk | TRUE | logisk | logisk |
| Integer | 4L | heltal | heltal |
| Double (numerisk) | 4.5 | numerisk | fordoble |
| Character | "R er fantastisk" | karakter | karakter |
| Complex | 3+2i | komplekse | komplekse |
| Raw | som.raw(10) | rรฅ | rรฅ |
Vi kan kontrollere typen af โโen variabel med klassefunktionen.
Eksempel 1: Tjek en numerisk variabel
# Declare variables of different types # Numeric x <- 28 class(x)
Output:
## [1] "numeric"
Eksempel 2: Tjek en tegnvariabel
# String y <- "R is Fantastic" class(y)
Output:
## [1] "character"
Eksempel 3: Tjek en logisk variabel
# Boolean z <- TRUE class(z)
Output:
## [1] "logical"
Bemรฆrk at class() svarer "numerisk" for 28, selvom 28 ikke har nogen decimaldel. R gemte det som en double, og kun typeof() afslรธrer det. Den nรฆste forskel, der er vรฆrd at lรฆre, er, hvordan disse vรฆrdier fรฅr navne.
Variabler i R
Variabler er en af โโde grundlรฆggende byggesten i R, der lagrer vรฆrdier, og de er vigtige for alle, der arbejder med datalogi. En variabel i R kan lagre et tal, et objekt, et statistisk resultat, en vektor, et datasรฆt eller en modelforudsigelse โ stort set alt, hvad R udskriver. Vi kan bruge den variabel senere ved blot at kalde navnet pรฅ variablen.
For at deklarere en variabel i R, skal vi tildele den et variabelnavn. Navnet mรฅ ikke indeholde mellemrum. Vi kan bruge _ til at forbinde to ord.
Navne kan indeholde bogstaver, cifre, prikker og understregninger, men de skal starte med et bogstav eller et punktum, og reserverede ord som TRUE, FALSE og NULL kan ikke bruges som navne. For at tilfรธje en vรฆrdi til variablen skal du bruge <- eller =.
Her er syntaksen:
# First way to declare a variable: use the `<-` name_of_variable <- value # Second way to declare a variable: use the `=` name_of_variable = value
Pรฅ kommandolinjen kan vi skrive fรธlgende koder for at se, hvad der sker:
Eksempel 1: Tildel en vรฆrdi og udskriv den
# Print variable x
x <- 42
x
Output:
## [1] 42
Eksempel 2: Deklarer en anden variabel
y <- 10 y
Output:
## [1] 10
Eksempel 3: Brug to variabler i รฉt udtryk
# We call x and y and apply a subtraction
x-y
Output:
## [1] 32
En variabel, der indeholder flere vรฆrdier af samme type, er en vektor, som er den struktur, som nรฆsten alle R-funktioner forventer.
Vektorer i R
En vektor er en endimensionel samling, hvor hvert element deler den samme type. Vi kan oprette en vektor med alle de grundlรฆggende R-datatyper, som vi har lรฆrt tidligere. Den enkleste mรฅde at opbygge en vektor i R pรฅ er at bruge c()-funktionen.
Eksempel 1: Opret en numerisk vektor
# Numerical
vec_num <- c(1, 10, 49)
vec_num
Output:
## [1] 1 10 49
Eksempel 2: Opret en tegnvektor
# Character vec_chr <- c("a", "b", "c") vec_chr
Output:
## [1] "a" "b" "c"
Eksempel 3: Opret en logisk vektor
# Boolean vec_bool <- c(TRUE, FALSE, TRUE) vec_bool
Output:
##[1] TRUE FALSE TRUE
Hvis c() modtager en blanding af typer, fejler den ikke. Den tvinger stille og roligt hvert element op til den mest generelle type, der findes, sรฅ c(1, "a", TRUE) bliver en tegnvektor. Vi kan ogsรฅ udfรธre aritmetiske beregninger pรฅ vektorer i R.
Eksempel 4: Lรฆg to vektorer element for element sammen
# Create the vectors vect_1 <- c(1, 3, 5) vect_2 <- c(2, 4, 6) # Take the sum of A_vector and B_vector sum_vect <- vect_1 + vect_2 # Print out total_vector sum_vect
Output:
[1] 3 7 11
Additionen fungerede element for element, fordi begge vektorer har samme lรฆngde. Nรฅr lรฆngderne er forskellige, genbruger R den kortere vektor, gentager den, indtil den matcher den lรฆngste, og advarer kun, nรฅr den lรฆngere lรฆngde ikke er et multiplum af den kortere.
Eksempel 5: Opdel de fรธrste fem elementer
I R er det muligt at skรฆre en vektor. I nogle tilfรฆlde er vi kun interesserede i de fรธrste fem elementer i en vektor. Vi kan bruge kommandoen [1:5] til at f.eks.tracvรฆrdierne 1 til 5.
# Slice the first five rows of the vector
slice_vector <- c(1,2,3,4,5,6,7,8,9,10)
slice_vector[1:5]
Output:
## [1] 1 2 3 4 5
Eksempel 6: Opbyg et interval med kolon OperaTor
Den korteste mรฅde at oprette et vรฆrdiinterval pรฅ er at bruge kolonoperatoren (:) mellem to tal. For eksempel kan vi fra ovenstรฅende eksempel skrive c(1:10) for at oprette en vektor af vรฆrdier fra et til ti.
# Faster way to create adjacent values
c(1:10)
Output:
## [1] 1 2 3 4 5 6 7 8 9 10
Fordi en vektor lydlรธst รฆndrer type, nรฅr den blandes, er det en god idรฉ at vide, hvordan man inspicerer og konverterer typer efter behov.
Sรฅdan kontrollerer og konverterer du datatyper i R
Tre funktionsfamilier besvarer de tre spรธrgsmรฅl, der konstant dukker op: hvad er dette, er dette en given type, og kan dette blive til en anden type.
| Funktionsfamilie | Spรธrgsmรฅl det besvarer | Eksempler |
|---|---|---|
| klasse(), typeof(), mode() | Hvilken type er denne vรฆrdi? | klasse(28), type(28), tilstand(28) |
| er.*() | Er denne vรฆrdi af typen X? | is.numeric(), is.character(), is.logical() |
| som.*() | Kan denne vรฆrdi blive til type X? | som.numerisk(), som.character(), som.integer() |
| str() | Hvordan ser dette objekt ud overordnet set? | str(vec_num) |
# Three different views of the same value x <- 28 class(x) # "numeric" -- the class used for method dispatch typeof(x) # "double" -- how R stores the value internally mode(x) # "numeric" -- the older S-style mode # Ask a yes/no question about a type is.numeric(x) # TRUE is.character(x) # FALSE # Convert between types as.character(x) # "28" as.integer("28") # 28 stored as an integer as.numeric("abc") # NA, with a coercion warning
To regler forklarer de fleste overraskelser her. For det fรธrste rapporterer class() den klasse, der bruges til metodeafsendelse, mens typeof() rapporterer den interne lagring, hvilket er grunden til, at 28 er "numerisk" for den ene og "dobbelt" for den anden. For det andet stopper en konvertering, der ikke kan lykkes, ikke scriptet: as.numeric("abc") returnerer NA og udskriver en tvangsadvarsel, sรฅ tavse NA'er efter en import er nรฆsten altid et typeproblem. Den samme logik driver faktorer, som gemmer kategorier som heltalskoder plus en tabel over niveauer.
Nรฅr typerne er afgjort, er det de nรฆste operatorer, der handler pรฅ dem.
R Aritmetik Operatorer
Vi vil fรธrst se pรฅ de grundlรฆggende aritmetiske operatorer i R. Fรธlgende er de aritmetiske operatorer i R-programmering og hvad de stรฅr for:
| OperaTor | Beskrivelse |
|---|---|
| + | Tilsรฆtning |
| - | Undertraction |
| * | Multiplikation |
| / | Afdeling |
| ^ eller ** | eksponentiering |
| %% | Modulo (resten efter division) |
| %/% | Heltalsdivision (kvotient, rest kasseret) |
Hver af disse operatorer er vektoriseret, sรฅ det samme udtryk fungerer pรฅ en enkelt vรฆrdi eller pรฅ en hel kolonne.
Eksempel 1: Addition
# An addition
3 + 4
Output:
## [1] 7
Du kan nemt kopiere og indsรฆtte ovenstรฅende R-kode i RStudio Konsol. I denne artikel vises outputtet pรฅ linjer, der starter med ##. Hvis vi f.eks. skriver koden print("Guru99") konsollen udskriver [1] "Guru99", som denne side ville vise som ## [1] "Guru99".
## markerer en linje med udskrevet output, og tallet i den firkantede parentes ([1]) er indekset for den fรธrste vรฆrdi pรฅ den linje, ikke en del af resultatet.
Sรฆtninger, der starter med #, er kommentarer. Vi kan bruge # i et R-script til at tilfรธje en hvilken som helst note, og R ignorerer det under kรธrsel.
Eksempel 2: Multiplikation
# A multiplication
3*5
Output:
## [1] 15
Eksempel 3: Division
# A division
(5+5)/2
Output:
## [1] 5
Eksempel 4: Eksponentiering
# Exponentiation
2^5
Output:
## [1] 32
Eksempel 5: Modulo
# Modulo
28%%6
Output:
## [1] 4
Aritmetik producerer tal. Den nรฆste gruppe operatorer producerer i stedet SAND og FALSK.
R Relationel (Sammenligning) Operatorer
Relationsoperatorer sammenligner to vรฆrdier og returnerer et logisk resultat. Det er de operatorer, der opbygger de betingelser, der bruges til filtrering, og de vektoriseres pรฅ prรฆcis samme mรฅde som de aritmetiske operatorer.
| OperaTor | Beskrivelse |
|---|---|
| > | Stรธrre end |
| < | Less end |
| >= | Stรธrre end eller lig med |
| <= | Less end eller lig med |
| == | Prรฆcis lig med |
| != | Ikke lig med |
a <- 10 b <- 3 a > b # TRUE a < b # FALSE a >= 10 # TRUE a <= 3 # FALSE a == b # FALSE a != b # TRUE # Relational operators are vectorised scores <- c(45, 78, 90, 62) scores >= 60 # FALSE TRUE TRUE TRUE
To vaner sparer tid her. Brug == til sammenligning og <- til tildeling, fordi en enkelt = i en betingelse er en almindelig begynderfejl. Og undgรฅ == pรฅ doubles: flydende-komma-afrunding betyder, at 0.1 + 0.2 == 0.3 er FALSK, sรฅ isTRUE(all.equal(0.1 + 0.2, 0.3)) er den sikre test. Sammenligninger pรฅ sorterede datarammer fรธlge de samme regler.
R Logisk Operatorer
Med logiske operatorer รธnsker vi at returnere vรฆrdier inden for vektoren baseret pรฅ logiske betingelser. Tabellen nedenfor viser de logiske operatorer, der er tilgรฆngelige i R.
De logiske udsagn i R er pakket ind i []. Vi kan tilfรธje sรฅ mange betingede udsagn, som vi รธnsker, men vi skal inkludere dem i parenteser. Vi kan fรธlge denne struktur for at oprette en betinget udsagn:
variable_name[(conditional_statement)]
Med variable_name som refererer til den variabel, vi vil bruge til sรฆtningen, opretter vi den logiske sรฆtning, for eksempel variable_name > 0. Til sidst bruger vi de firkantede parenteser til at fรฆrdiggรธre den logiske sรฆtning. Nedenfor er et eksempel pรฅ en logisk sรฆtning.
Eksempel 1: Sammenlign alle elementer i en vektor
# Create a vector from 1 to 10
logical_vector <- c(1:10)
logical_vector>5
Output:
## [1]FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
I outputtet ovenfor lรฆser R hver vรฆrdi og sammenligner den med sรฆtningen logical_vector>5. Hvis vรฆrdien er strengt taget stรธrre end fem, er betingelsen SAND, ellers FALSK. R returnerer en vektor af SAND og FALSK.
Eksempel 2: Behold kun de elementer, der matcher
I eksemplet nedenfor รธnsker vi at f.eks.tracde vรฆrdier, der kun opfylder betingelsen 'er strengt taget stรธrre end fem'. For at gรธre dette kan vi omslutte betingelsen i firkantede parenteser efterfulgt af vektoren, der indeholder vรฆrdierne.
# Print value strictly above 5
logical_vector[(logical_vector>5)]
Output:
## [1] 6 7 8 9 10
Eksempel 3: Kombinรฉr to betingelser
# Print 5 and 6
logical_vector <- c(1:10)
logical_vector[(logical_vector>4) & (logical_vector<7)]
Output:
## [1] 5 6
Eksempel 3 bruger det enkelte og-tegnet & med vilje. Enkelttegnsoperatorerne & og | sammenligner vektorer element for element og returnerer en vektor, hvilket er, hvad delmรฆngder har brug for. Dobbeltformerne && og || returnerer รฉn vรฆrdi og hรธrer hjemme i if()- og while()-betingelserne. Da R 4.3.0, at sende et argument, der er lรฆngere end รฉt element, til && eller || er en fejl snarere end en advarsel, sรฅ de to familier er ikke lรฆngere udskiftelige. !-operatoren negerer en betingelse, og xor() giver eksklusiv ELLER.
R-tildeling Operatorer
Tildelingsoperatorer binder en vรฆrdi til et navn. R tilbyder flere af dem end de fleste sprog, og forskellene betyder noget, nรฅr koden flyttes ind i funktioner.
| OperaTor | Beskrivelse |
|---|---|
| <- | Venstretildeling, det idiomatiske valg i R |
| = | Venstre tildeling, men normalt reserveret til funktionsargumenter |
| -> | Korrekt tildeling, gyldig men sjรฆldent brugt |
| <<- | Supertildeling, der sรธger i omsluttende miljรธer |
| - >> | Hรธjre supertildeling |
# Left assignment -- the idiomatic form count <- 5 # Equals sign: works, but reserve it for function arguments count = 5 round(3.14159, digits = 2) # Right assignment 5 -> count # Superassignment, used inside functions to reach an outer scope count <<- 5
Stilguider anbefaler <- til oprettelse af objekter og = til navngivning af argumenter i et kald, fordi de to roller sรฅ forbliver visuelt adskilte. Brug <<- sparsomt: det รฆndrer et objekt uden for den aktuelle funktion og gรธr det svรฆrere at rรฆsonnere om kode. Nรฅr tildeling og typer er komfortable, er de nรฆste trin: import af reelle data og reshaping det med dplyr; det Oversigt over R-sproget sรฆtter hele vรฆrktรธjskรฆden i kontekst.

