Datatyper i R med exempel

โšก Smart sammanfattning

Datatyper i R definierar hur vรคrden lagras i minnet, och operatorer bestรคmmer vad R kan gรถra med dem. Vektorer, variabler, aritmetiska, relationella, logiska och tilldelningsoperatorer behandlas hรคr med kรถrbara exempel.

  • ๐Ÿ”˜ Atomic-typer: R lagrar varje vรคrde som logiskt, heltal, dubbelt, komplext, tecken- eller rรฅvรคrde.
  • โ˜‘๏ธ Typkontroll: class(), typeof() och mode() beskriver ett vรคrde frรฅn tre olika vinklar.
  • โœ… vektorer: Funktionen c() bygger en endimensionell samling dรคr varje element delar en typ.
  • ๐Ÿงช Operators: Aritmetiska, relationella, logiska och tilldelningsoperatorer tรคcker nรคstan alla bas-R-uttryck.
  • ๐Ÿ› ๏ธ Delmรคngd: Hakparenteser kombinerade med ett logiskt villkorsfilter vektorelement pรฅ en enda rad.
  • โš ๏ธ Versionsnotering: R 4.3.0 fรถrvandlade ett argument med en lรคngd som รคr stรถrre รคn ett till && eller || till ett fel.

Datatyper i R

Vilka รคr datatyperna i R?

Fรถljande รคr datatyperna eller datastrukturerna i R-programmering:

Den listan blandar tvรฅ relaterade idรฉer, och att separera dem gรถr resten av sidan lรคttare att fรถlja. data typ beskriver vad ett enskilt vรคrde รคr โ€“ ett tal, en textbit, ett SANT eller ett FALSKT. datastruktur beskriver hur mรฅnga vรคrden som hรฅlls samman och i vilken form. Skalรคrer, vektorer, matriser, dataramar och listor รคr strukturer; vรคrdena inuti dem tillhรถr fortfarande en av R:s grundlรคggande typer.

Structure Mรฅtt Tillรฅts blandade typer? Typisk anvรคndning
Skalรคr Lรคngd-1 vektor Nej En enda mรคtning eller flagga
vektor 1 Nej En kolumn med avlรคsningar av en typ
Matris 2 Nej Numeriska rutnรคt och linjรคr algebra
Dataram 2 Ja, en typ per kolumn Tabellรคra datamรคngder
Lista 1, men nestbar Ja, vad som helst per element Modellresultat och blandade behรฅllare

R har ingen separat skalรคrtyp: en skalรคr รคr helt enkelt en vektor med lรคngden ett, vilket รคr anledningen till att sรฅ mycket R-kod skrivs fรถr hela vektorer samtidigt.

Grundlรคggande datatyper i R

Varje vรคrde i R tillhรถr en av en liten uppsรคttning grundlรคggande (atomรคra) typer:

  • 4.5 รคr ett decimaltal som kallas numeriskt.
  • 4 ser ut som ett heltal, men R lagrar det fortfarande som en dubbel. Skriv 4L nรคr ett sant heltal krรคvs.
  • SANT eller FALSKT รคr ett booleskt vรคrde, kallat ett logiskt vรคrde i R.
  • Vรคrdet inuti โ€ โ€ eller ' ' รคr text (en strรคng). Dessa vรคrden kallas tecken.

Tvรฅ ytterligare typer kompletterar uppsรคttningen. Komplexa vรคrden som 3+2i innehรฅller en reell och en imaginรคr del, och rรฅvรคrden innehรฅller byte. Bรฅda fรถrekommer sรคllan i daglig analys, men de listas i bas-R. typeof() dokumentation tillsammans med de fyra vanliga typerna.

Typ Exempelvรคrde class() returnerar typeof() returnerar
logisk SANN logisk logisk
Heltal 4L heltal heltal
Double (numerisk) 4.5 numerisk dubbla
Karaktรคr "R รคr fantastisk" karaktรคr karaktรคr
Komplex 3+2i komplex komplex
Raw som.raw(10) obehandlad obehandlad

Vi kan kontrollera typen av en variabel med klassfunktionen.

Exempel 1: Kontrollera en numerisk variabel

# Declare variables of different types
# Numeric
x <- 28
class(x)

Produktion:

## [1] "numeric"

Exempel 2: Kontrollera en teckenvariabel

# String
y <- "R is Fantastic"
class(y)

Produktion:

## [1] "character"

Exempel 3: Kontrollera en logisk variabel

# Boolean
z <- TRUE
class(z)

Produktion:

## [1] "logical"

Observera att class() svarar "numeriskt" fรถr 28 trots att 28 inte har nรฅgon decimaldel. R lagrade det som en double, och endast typeof() visar det. Nรคsta skillnad som รคr vรคrd att lรคra sig รคr hur dessa vรคrden fรฅr namn.

Variabler i R

Variabler รคr en av de grundlรคggande byggstenarna i R som lagrar vรคrden, och de รคr viktiga fรถr alla som arbetar med data science. En variabel i R kan lagra ett tal, ett objekt, ett statistiskt resultat, en vektor, en datauppsรคttning eller en modellprediktion โ€“ i princip allt som R matar ut. Vi kan anvรคnda variabeln senare genom att helt enkelt anropa variabelns namn.

Fรถr att deklarera en variabel i R mรฅste vi tilldela den ett variabelnamn. Namnet fรฅr inte innehรฅlla mellanslag. Vi kan anvรคnda _ fรถr att fรถrena tvรฅ ord.

Namn kan innehรฅlla bokstรคver, siffror, punkter och understreck, men de mรฅste bรถrja med en bokstav eller en punkt, och reserverade ord som SANT, FALSKT och NULL kan inte anvรคndas som namn. Fรถr att lรคgga till ett vรคrde till variabeln, anvรคnd <- eller =.

Hรคr รคr syntaxen:

# 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รฅ kommandoraden kan vi skriva fรถljande koder fรถr att se vad som hรคnder:

Exempel 1: Tilldela ett vรคrde och skriv ut det

# Print variable x
x <- 42
x

Produktion:

## [1] 42

Exempel 2: Deklarera en andra variabel

y  <- 10
y

Produktion:

## [1] 10

Exempel 3: Anvรคnd tvรฅ variabler i ett uttryck

# We call x and y and apply a subtraction
x-y

Produktion:

## [1] 32

En variabel som innehรฅller flera vรคrden av samma typ รคr en vektor, vilket รคr den struktur som nรคstan alla R-funktioner fรถrvรคntar sig.

Vektorer i R

En vektor รคr en endimensionell samling dรคr varje element delar samma typ. Vi kan skapa en vektor med alla grundlรคggande R-datatyper som vi lรคrt oss tidigare. Det enklaste sรคttet att bygga en vektor i R รคr att anvรคnda funktionen c().

Exempel 1: Skapa en numerisk vektor

# Numerical
vec_num <- c(1, 10, 49)
vec_num

Produktion:

## [1]  1 10 49

Exempel 2: Skapa en teckenvektor

# Character 
vec_chr <- c("a", "b", "c")
vec_chr

Produktion:

## [1] "a" "b" "c"

Exempel 3: Skapa en logisk vektor

# Boolean 
vec_bool <-  c(TRUE, FALSE, TRUE)
vec_bool

Produktion:

##[1] TRUE FALSE TRUE

Om c() tar emot en blandning av typer, misslyckas den inte. Den tvingar tyst varje element upp till den mest generella typen som finns, sรฅ c(1, "a", TRUE) blir en teckenvektor. Vi kan ocksรฅ gรถra aritmetiska berรคkningar pรฅ vektorer i R.

Exempel 4: Addera tvรฅ vektorer element fรถr element

# 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

Produktion:

[1]  3  7 11

Additionen fungerade element fรถr element eftersom bรฅda vektorerna har samma lรคngd. Nรคr lรคngderna skiljer sig รฅt, รฅteranvรคnder R den kortare vektorn och upprepar det tills den matchar den lรคngre, och varnar endast nรคr den lรคngre lรคngden inte รคr en multipel av den kortare.

Exempel 5: Dela upp de fรถrsta fem elementen

I R รคr det mรถjligt att skiva en vektor. I vissa fall รคr vi bara intresserade av de fรถrsta fem elementen i en vektor. Vi kan anvรคnda kommandot [1:5] fรถr att t.ex.tracvรคrdena 1 till 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]

Produktion:

## [1] 1 2 3 4 5

Exempel 6: Bygg ett intervall med kolon Operator

Det kortaste sรคttet att skapa ett vรคrdeintervall รคr att anvรคnda kolonoperatorn (:) mellan tvรฅ tal. Till exempel, frรฅn exemplet ovan kan vi skriva c(1:10) fรถr att skapa en vektor med vรคrden frรฅn ett till tio.

# Faster way to create adjacent values
c(1:10)

Produktion:

## [1]  1  2  3  4  5  6  7  8  9 10

Eftersom en vektor tyst รคndrar typ nรคr den blandas, lรถnar det sig att veta hur man inspekterar och konverterar typer pรฅ begรคran.

Hur man kontrollerar och konverterar datatyper i R

Tre funktionsfamiljer besvarar de tre frรฅgor som stรคndigt dyker upp: vad รคr detta, รคr detta en given typ, och kan detta bli en annan typ.

Funktionsfamilj Frรฅga den svarar Exempel
klass(), typ(), lรคge() Vilken typ รคr detta vรคrde? klass(28), typ(28), lรคge(28)
รคr.*() ร„r detta vรคrde av typen X? รคr.numerisk(), รคr.tecken(), รคr.logisk()
som.*() Kan detta vรคrde bli typ X? som.numerisk(), som.tecken(), som.integer()
str () Hur ser det hรคr objektet ut รถverlag? 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

Tvรฅ regler fรถrklarar de flesta รถverraskningarna hรคr. Fรถr det fรถrsta rapporterar class() klassen som anvรคnds fรถr metodavsรคndning medan typeof() rapporterar den interna lagringen, vilket รคr anledningen till att 28 รคr "numerisk" fรถr den ena och "dubbel" fรถr den andra. Fรถr det andra stoppar inte en konvertering som inte lyckas skriptet: as.numeric("abc") returnerar NA och skriver ut en tvรฅngsvarning, sรฅ tysta NA:er efter en import รคr nรคstan alltid ett typproblem. Samma logik driver faktorer, som lagrar kategorier som heltalskoder plus en tabell รถver nivรฅer.

Nรคr typerna รคr avgjorda รคr det nรคsta steg med operatorerna som agerar pรฅ dem.

R Aritmetik Operatorer

Vi ska fรถrst se de grundlรคggande aritmetiska operatorerna i R. Fรถljande รคr de aritmetiska operatorerna i R-programmering och vad de stรฅr fรถr:

Operator BESKRIVNING
+ Dessutom
- Subtraction
* Multiplikation
/ division
^ eller ** exponentiering
%% Modulo (resten efter division)
%/% Heltalsdivision (kvot, resten utelรคmnad)

Var och en av dessa operatorer รคr vektoriserade, sรฅ samma uttryck fungerar pรฅ ett enda vรคrde eller pรฅ en hel kolumn.

Exempel 1: Addition

# An addition
3 + 4

Produktion:

## [1] 7

Du kan enkelt kopiera och klistra in ovanstรฅende R-kod i RStudio Konsol. I den hรคr artikeln visas utdata pรฅ rader som bรถrjar med ##. Om vi โ€‹โ€‹till exempel skriver koden print("Guru99") konsolen skriver ut [1] "Guru99", vilket den hรคr sidan skulle visa som ## [1] "Guru99. "

## markerar en rad med utskriven utgรฅng, och siffran inom hakparentesen ([1]) รคr indexet fรถr det fรถrsta vรคrdet pรฅ den raden, inte en del av resultatet.

Meningar som bรถrjar med # รคr kommentarer. Vi kan anvรคnda # i ett R-skript fรถr att lรคgga till vilken anteckning vi vill, och R ignorerar det vid kรถrning.

Exempel 2: Multiplikation

# A multiplication
3*5

Produktion:

## [1] 15

Exempel 3: Division

# A division
(5+5)/2

Produktion:

## [1] 5

Exempel 4: Exponentiering

# Exponentiation
2^5

Produktion:

## [1] 32

Exempel 5: Modulo

# Modulo
28%%6

Produktion:

## [1] 4

Aritmetik producerar tal. Nรคsta grupp operatorer producerar istรคllet SANT och FALSKT.

R Relationell (Jรคmfรถrelse) Operatorer

Relationsoperatorer jรคmfรถr tvรฅ vรคrden och returnerar ett logiskt resultat. Det รคr operatorerna som bygger villkoren som anvรคnds fรถr filtrering, och de vektoriseras pรฅ exakt samma sรคtt som de aritmetiska operatorerna.

Operator BESKRIVNING
> Stรถrre รคn
< Less รคn
>= Stรถrre รคn eller lika med
<= Less รคn eller lika med
== Exakt lika med
!= Inte lika 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

Tvรฅ vanor sparar tid hรคr. Anvรคnd == fรถr jรคmfรถrelse och <- fรถr tilldelning, eftersom ett enkelt = inuti ett villkor รคr ett vanligt nybรถrjarfel. Och undvik == pรฅ dubblar: flyttal med avrundning innebรคr att 0.1 + 0.2 == 0.3 รคr FALSKT, sรฅ isTRUE(all.equal(0.1 + 0.2, 0.3)) รคr det sรคkra testet. Jรคmfรถrelser pรฅ sorterade dataramar fรถlja samma regler.

R Logisk Operatorer

Med logiska operatorer vill vi returnera vรคrden inom vektorn baserat pรฅ logiska villkor. Tabellen nedan listar de logiska operatorer som finns tillgรคngliga i R.

Referenstabell รถver logiska och relationella operatorer i R med deras betydelser

De logiska satserna i R รคr inramade inom []. Vi kan lรคgga till sรฅ mรฅnga villkorssatser som vi vill, men vi mรฅste inkludera dem inom parenteser. Vi kan fรถlja denna struktur fรถr att skapa en villkorssats:

variable_name[(conditional_statement)]

Med variabelnamn som hรคnvisar till den variabel vi vill anvรคnda fรถr satsen skapar vi den logiska satsen, till exempel variabelnamn > 0. Slutligen anvรคnder vi hakparenteser fรถr att slutfรถra den logiska satsen. Nedan fรถljer ett exempel pรฅ en logisk sats.

Exempel 1: Jรคmfรถr alla element i en vektor

# Create a vector from 1 to 10
logical_vector <- c(1:10)
logical_vector>5

Produktion:

## [1]FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE

I utdata ovan lรคser R varje vรคrde och jรคmfรถr det med uttrycket logical_vector>5. Om vรคrdet รคr strikt stรถrre รคn fem, รคr villkoret SANT, annars FALSKT. R returnerar vektorerna SANT och FALSKT.

Exempel 2: Behรฅll endast de element som matchar

I exemplet nedan vill vi t.ex.tracde vรคrden som bara uppfyller villkoret 'รคr strikt stรถrre รคn fem'. Fรถr att gรถra det kan vi omge villkoret med hakparenteser fรถregรฅngna av vektorn som innehรฅller vรคrdena.

# Print value strictly above 5
logical_vector[(logical_vector>5)]

Produktion:

## [1]  6  7  8  9 10

Exempel 3: Kombinera tvรฅ villkor

# Print 5 and 6
logical_vector <- c(1:10)
logical_vector[(logical_vector>4) & (logical_vector<7)]

Produktion:

## [1] 5 6

Exempel 3 anvรคnder avsiktligt det enkla et-tecknet &. Enteckensoperatorerna & och | jรคmfรถr vektorer element fรถr element och returnerar en vektor, vilket รคr vad delmรคngder behรถver. Dubbelformerna && och || returnerar ett vรคrde och hรถr hemma i if()- och while()-villkoren. Eftersom R 4.3.0, att skicka ett argument som รคr lรคngre รคn ett element till && eller || รคr ett fel snarare รคn en varning, sรฅ de tvรฅ familjerna รคr inte lรคngre utbytbara. !-operatorn negerar ett villkor, och xor() ger exklusiv ELLER.

R-uppgift Operatorer

Tilldelningsoperatorer binder ett vรคrde till ett namn. R erbjuder fler av dem รคn de flesta sprรฅk, och skillnaderna spelar roll nรคr koden flyttas in funktioner.

Operator BESKRIVNING
<- Vรคnstertilldelning, det idiomatiska valet i R
= Vรคnstertilldelning, men normalt reserverad fรถr funktionsargument
-> Rรคtt uppgift, giltig men sรคllan anvรคnd
<<- Supertilldelning som sรถker i omslutande miljรถer
- >> Hรถger supertilldelning
# 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 rekommenderar <- fรถr att skapa objekt och = fรถr att namnge argument inuti ett anrop, eftersom de tvรฅ rollerna dรฅ fรถrblir visuellt รฅtskilda. Anvรคnd <<- sparsamt: det รคndrar ett objekt utanfรถr den aktuella funktionen och gรถr det svรฅrare att resonera kring koden. Nรคr tilldelning och typer รคr bekvรคma รคr nรคsta steg importera verkliga data och reshaping det med dplyr; Den ร–versikt รถver R-sprรฅket sรคtter hela verktygskedjan i ett sammanhang.

Vanliga frรฅgor

En vektor innehรฅller endast element av en typ, och att blanda typer tvingar fram tvรฅng. En lista innehรฅller vad som helst i varje plats, inklusive andra listor, dataframes eller funktioner, vilket รคr anledningen till att modellobjekt รคr listor.

Nรคr tvรฅ vektorer med olika lรคngder mรถter en operator, upprepar R den kortare tills lรคngderna matchar. c(1,2,3,4) + c(1,2) ger 2 4 4 6. En varning visas endast nรคr den lรคngre lรคngden inte รคr en multipel.

NA markerar ett saknat vรคrde inuti en vektor. NULL markerar frรฅnvaron av ett objekt och har lรคngden noll. NaN รคr ett odefinierat numeriskt resultat, till exempel 0/0. Inf รคr division med noll, som i 1/0.

Operatorn %in% testar medlemskap och returnerar TRUE fรถr varje vรคnsterelement som finns i den hรถgra vektorn. c(2,7) %in% c(1,2,3) returnerar TRUE FALSE. Den ersรคtter lรฅnga kedjor av == jรคmfรถrelser som รคr sammanfogade med |.

Vรคlj ett matris fรถr numeriska rutnรคt och linjรคr algebra, en dataram fรถr tabeller vars kolumner skiljer sig รฅt i typ, och en lista nรคr element har olika former.

Introducerad i R 4.1.0, skickar |> vรคrdet till vรคnster till det fรถrsta argumentet i funktionen till hรถger. Den kedjar steg utan att kapsla anrop och behรถver inget paket, till skillnad frรฅn magrittr %>% pipe.

AI-assistenter flaggar typfel, fรถreslรฅr as.*-konverteringar och utarbetar omkodningskod frรฅn ett urval av rader. De fรถreslรฅr ocksรฅ steg fรถr funktionsutveckling innan en maskininlรคrning modellen รคr monterad. Kontrollera alltid den genererade koden mot dina data.

Ja. RStudio 2023.09.0 och senare levereras GitHub Copilot integration som slutfรถr R-uttryck inline. En Copilot-prenumeration krรคvs och administratรถrer mรฅste aktivera den pรฅ RStudio Server eller Posit Workbench.

Sammanfatta detta inlรคgg med: