Tietotyypit R:ssä esimerkin kanssa

⚡ Älykäs yhteenveto

R:n tietotyypit määrittelevät, miten arvot tallennetaan muistiin, ja operaattorit päättävät, mitä R voi niillä tehdä. Vektoreita, muuttujia, aritmeettisia, relaatio-, loogisia ja sijoitusoperaattoreita käsitellään tässä suoritettavien esimerkkien avulla.

  • 🔘 AtomIC-tyypit: R tallentaa jokaisen arvon loogisena, kokonaislukuna, kaksinkertaisena, kompleksisena, merkki- tai raakana.
  • ☑️ Tyyppitarkistus: class(), typeof() ja mode() kuvaavat arvon kolmesta eri näkökulmasta.
  • Vektorit: c()-funktio rakentaa yksiulotteisen kokoelman, jossa jokaisella elementillä on sama tyyppi.
  • 🧪 Operatorit: Aritmeettiset, relaatio-, loogiset ja sijoitusoperaattorit kattavat lähes kaikki R:n peruslausekkeet.
  • 🛠️ Osajoukko: Hakasulkeet yhdistettynä loogiseen ehtosuodattimen vektorielementteihin yhdellä rivillä.
  • ⚠️ Versiohuomautus: R 4.3.0 muutti pituus-suurempi kuin yksi -argumentin &&- tai ||-merkiksi virheeksi.

Tietotyypit R:ssä

Mitkä ovat R:n tietotyypit?

Seuraavat ovat R-ohjelmoinnin tietotyypit tai tietorakenteet:

Tuossa luettelossa yhdistyvät kaksi toisiinsa liittyvää ideaa, ja niiden erottaminen toisistaan ​​helpottaa sivun seuraamista. tietotyyppi kuvaa, mitä yksittäinen arvo on — numero, tekstipätkä, TOSI tai EPÄTOSI. tietorakenne kuvaa kuinka monta arvoa pidetään yhdessä ja missä muodossa. Skalaarit, vektorit, matriisit, datakehykset ja listat ovat rakenteita; niiden sisällä olevat arvot kuuluvat edelleen johonkin R:n perustyypeistä.

Tuote mallit Mitat Sallitaanko sekatyypit? Tyypillinen käyttö
skalaari Pituus-1 vektori Ei Yksittäinen mittaus tai lippu
vektori 1 Ei Yhden tyyppisten lukemien sarake
Matriisi 2 Ei Numeeriset ruudukot ja lineaarialgebra
Datakehys 2 Kyllä, yksi tyyppi saraketta kohden Taulukkomuotoiset tietojoukot
Lista 1, mutta sisäkkäin asetettava Kyllä, mitä tahansa elementtiä kohden Mallitulokset ja sekalaiset astiat

R:llä ei ole erillistä skalaarityyppiä: skalaari on yksinkertaisesti yhden pituinen vektori, minkä vuoksi R-koodia kirjoitetaan niin paljon kerralla kokonaisille vektoreille.

Perustietotyypit R:ssä

Jokainen R:n arvo kuuluu johonkin pienestä joukosta perustyyppejä (atomityyppejä):

  • 4.5 on desimaaliarvo, jota kutsutaan numeroiksi.
  • Luku 4 näyttää kokonaisluvulta, mutta R tallentaa sen silti kaksoislukuna. Kirjoita 4L, kun vaaditaan tosi kokonaisluku.
  • TOSI tai EPÄTOSI on looginen arvo, jota R:ssä kutsutaan loogiseksi arvoksi.
  • ” ” tai ' ” sisällä oleva arvo on tekstiä (merkkijono). Näitä arvoja kutsutaan merkeiksi.

Kaksi muuta tyyppiä täydentävät joukon. Kompleksiset arvot, kuten 3+2i, sisältävät reaaliosan ja imaginääriosan, ja raaka-arvot sisältävät tavuja. Molemmat esiintyvät harvoin päivittäisessä analyysissä, mutta ne on lueteltu R-kantaluvussa. typeof()-dokumentaatio neljän yleisimmän tyypin rinnalla.

Tyyppi Esimerkkiarvo luokka() palauttaa typeof() palauttaa
looginen TOSI looginen looginen
Kokonaisluku 4L kokonaisluku kokonaisluku
Double (numeerinen) 4.5 numeerinen kaksinkertainen
Merkki "R on mahtava" merkki merkki
Monimutkainen 3+2i monimutkainen monimutkainen
raaka as.raw(10) raaka raaka

Voimme tarkistaa muuttujan tyypin luokkafunktiolla.

Esimerkki 1: Numeerisen muuttujan tarkistaminen

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

lähtö:

## [1] "numeric"

Esimerkki 2: Merkkimuuttujan tarkistaminen

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

lähtö:

## [1] "character"

Esimerkki 3: Loogisen muuttujan tarkistaminen

# Boolean
z <- TRUE
class(z)

lähtö:

## [1] "logical"

Huomaa, että class() vastaa "numeerisena" luvun 28 kohdalla, vaikka luvussa 28 ei ole desimaaliosaa. R tallensi sen kaksoiskappaleena, ja vain typeof() paljastaa sen. Seuraava oppimisen arvoinen ero on se, miten nämä arvot saavat nimensä.

Muuttujat R:ssä

Muuttujat ovat yksi R:n perusrakennepalikoista, jotka tallentavat arvoja, ja niillä on merkitystä kaikille datatieteen töitä tekeville. R:n muuttuja voi tallentaa luvun, objektin, tilastollisen tuloksen, vektorin, tietojoukon tai malliennusteen – käytännössä mitä tahansa R:n tuottamaa tietoa. Voimme käyttää kyseistä muuttujaa myöhemmin yksinkertaisesti kutsumalla muuttujan nimeä.

Muuttujan määrittäminen R:ssä edellyttää muuttujalle nimen antamista. Nimessä ei saa olla välilyöntiä. Voimme käyttää merkkiä _ kahden sanan yhdistämiseen.

Nimissä voi olla kirjaimia, numeroita, pisteitä ja alaviivoja, mutta niiden on alettava kirjaimella tai pisteellä, eivätkä varatut sanat, kuten TRUE, FALSE ja NULL, voi toimia niminä. Voit lisätä muuttujaan arvon käyttämällä <- tai =-merkkiä.

Tässä on syntaksi:

# First way to declare a variable:  use the `<-`
name_of_variable <- value
# Second way to declare a variable:  use the `=`
name_of_variable = value

Voimme kirjoittaa komentoriville seuraavat koodit nähdäksemme, mitä tapahtuu:

Esimerkki 1: Arvon määrittäminen ja sen tulostaminen

# Print variable x
x <- 42
x

lähtö:

## [1] 42

Esimerkki 2: Toisen muuttujan määrittäminen

y  <- 10
y

lähtö:

## [1] 10

Esimerkki 3: Käytä kahta muuttujaa yhdessä lausekkeessa

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

lähtö:

## [1] 32

Muuttuja, jolla on useita saman tyyppisiä arvoja, on vektori, ja lähes jokainen R-funktio odottaa samanlaista rakennetta.

Vektorit R:ssä

Vektori on yksiulotteinen kokoelma, jossa jokainen elementti on samaa tyyppiä. Voimme luoda vektorin käyttämällä kaikkia aiemmin opittuja R:n perustietotyyppejä. Yksinkertaisin tapa rakentaa vektori R:ssä on käyttää c()-funktiota.

Esimerkki 1: Luo numeerinen vektori

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

lähtö:

## [1]  1 10 49

Esimerkki 2: Merkkivektorin luominen

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

lähtö:

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

Esimerkki 3: Loogisen vektorin luominen

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

lähtö:

##[1] TRUE FALSE TRUE

Jos c() vastaanottaa useita eri tyyppejä, se ei epäonnistu. Se pakottaa hiljaisesti jokaisen elementin ylös yleisimpään läsnä olevaan tyyppiin, joten c(1, "a", TRUE) muuttuu merkkivektoriksi. Voimme myös tehdä aritmeettisia laskutoimituksia vektoreille R:ssä.

Esimerkki 4: Laske kaksi vektoria yhteen elementti elementiltä

# 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

lähtö:

[1]  3  7 11

Yhteenlasku suoritettiin alkio alkiolta, koska molemmilla vektoreilla on sama pituus. Kun pituudet eroavat toisistaan, R kierrättää lyhyempää vektoria ja toistaa sitä, kunnes se vastaa pidempää vektoria, ja varoittaa vain, jos pidempi pituus ei ole lyhyemmän vektorin monikerta.

Esimerkki 5: Viipaloi viisi ensimmäistä elementtiä

R:ssä on mahdollista viipaloida vektori. Joissakin tapauksissa olemme kiinnostuneita vain vektorin viidestä ensimmäisestä elementistä. Voimme käyttää [1:5]-komentoa laskemiseentracarvot 1–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]

lähtö:

## [1] 1 2 3 4 5

Esimerkki 6: Alueen luominen kaksoispisteellä OperaTor

Lyhin tapa luoda arvoalue on käyttää kaksoispisteoperaattoria (:) kahden luvun välissä. Esimerkiksi yllä olevasta esimerkistä voimme kirjoittaa c(1:10) luodaksemme vektorin arvoista yhdestä kymmeneen.

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

lähtö:

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

Koska vektori vaihtaa tyyppiä huomaamattomasti sekoitettaessa, kannattaa tietää, miten tyyppejä voidaan tarkastella ja muuntaa tarvittaessa.

Kuinka tarkistaa ja muuntaa tietotyyppejä R:ssä

Kolme funktioperhettä vastaa kolmeen jatkuvasti esiin nousevaan kysymykseen: mitä tämä on, onko tämä tietty tyyppi ja voiko tästä tulla jokin toinen tyyppi.

Funktioperhe Kysymys, johon se vastaa Esimerkit
luokka(), tyyppi(), tila() Minkä tyyppinen tämä arvo on? luokka(28), tyyppi(28), tila(28)
on.*() Onko tämä arvo tyyppiä X? is.numeric(), is.character(), is.logical()
kuten *() Voiko tästä arvosta tulla tyyppiä X? as.numeric(), as.character(), as.integer()
str() Miltä tämä esine näyttää kokonaisuudessaan? merkkijono(vanhen_numero)
# 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

Kaksi sääntöä selittää useimmat yllätykset tässä. Ensinnäkin class() raportoi metodin lähettämiseen käytetyn luokan, kun taas typeof() raportoi sisäisen tallennustilan, minkä vuoksi 28 on "numeerinen" toiselle ja "double" toiselle. Toiseksi, muunnos, joka ei onnistu, ei pysäytä skriptiä: as.numeric("abc") palauttaa NA:n ja tulostaa pakotusvaroituksen, joten hiljaiset NA:t tuonnin jälkeen ovat lähes aina tyyppiongelma. Sama logiikka ohjaa tekijät, jotka tallentavat kategoriat kokonaislukukoodeina sekä tasotaulukon.

Kun tyypit on selvitetty, seuraavaksi ovat niiden perusteella toimivat operaattorit.

R Aritmetiikka OperaTors

Ensin tarkastelemme R:n peruslaskennan operaattoreita. Seuraavassa on lueteltu R-ohjelmoinnin laskennan operaattorit ja niiden merkitykset:

OperaTor Tuotetiedot
+ Lisäys
- allatracTUKSEN
* Kertolasku
/ Divisioona
^ tai ** Potenssiinkorotus
%% Modulo (jäännös jakolaskun jälkeen)
%/% Kokonaislukujako (osamäärä, jakojäännös hylätään)

Jokainen näistä operaattoreista on vektorioitu, joten sama lauseke toimii yksittäiselle arvolle tai koko sarakkeelle.

Esimerkki 1: Yhteenlasku

# An addition
3 + 4

lähtö:

## [1] 7

Voit helposti kopioida ja liittää yllä olevan R-koodin RStudio Konsoli. Tässä artikkelissa tuloste näytetään riveillä, jotka alkavat ##-merkillä. Esimerkiksi, jos kirjoitamme koodin print("Guru99") konsoli tulostaa [1] "Guru99", joka tällä sivulla näkyisi muodossa ## [1] "Guru99. "

## merkitsee tulosteen riviä, ja hakasulkeissa oleva numero ([1]) on kyseisen rivin ensimmäisen arvon indeksi, ei osa tulosta.

#-merkillä alkavat lauseet ovat kommentteja. Voimme käyttää #-merkkiä R-skriptin sisällä lisätäksemme haluamamme muistiinpanot, ja R jättää ne huomiotta suorituksen aikana.

Esimerkki 2: Kertolasku

# A multiplication
3*5

lähtö:

## [1] 15

Esimerkki 3: Jakolasku

# A division
(5+5)/2

lähtö:

## [1] 5

Esimerkki 4: Potenssiinkorotus

# Exponentiation
2^5

lähtö:

## [1] 32

Esimerkki 5: Modulo

# Modulo
28%%6

lähtö:

## [1] 4

Aritmetiikka tuottaa lukuja. Seuraava operaattoriryhmä tuottaa TOSI ja EPÄTOSI.

R Relaatiolaskennallinen (vertailu) OperaTors

Relaatiooperaattorit vertaavat kahta arvoa ja palauttavat loogisen tuloksen. Ne ovat operaattoreita, jotka muodostavat suodatuksessa käytettävät ehdot, ja ne vektoroidaan täsmälleen samalla tavalla kuin aritmeettiset operaattorit.

OperaTor Tuotetiedot
> Suurempi kuin
< Less kuin
>= Suurempi tai yhtä suuri kuin
<= Less kuin tai yhtä suuri kuin
== Täsmälleen yhtä suuri kuin
!= Ei ole yhtä suuri kuin
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

Kaksi tapaa säästää aikaa tässä. Käytä == vertailuun ja <- sijoitusta varten, koska yksittäinen = ehdon sisällä on yleinen aloittelijan virhe. Ja vältä == tupla-arvojen kohdalla: liukulukujen pyöristys tarkoittaa, että 0.1 + 0.2 == 0.3 on EPÄTOSI, joten isTRUE(all.equal(0.1 + 0.2, 0.3)) on turvallisin testi. Vertailut lajitellut datakehykset noudattaa samoja sääntöjä.

R Looginen OperaTors

Loogisten operaattoreiden avulla haluamme palauttaa vektorin sisällä olevia arvoja loogisten ehtojen perusteella. Alla olevassa taulukossa on lueteltu R:ssä käytettävissä olevat loogiset operaattorit.

Loogisten ja relaatio-operaattoreiden viitetaulukko R:ssä ja niiden merkitykset

R:n loogiset lausekkeet on kääritty [-merkkien] sisään. Voimme lisätä niin monta ehtolausetta kuin haluamme, mutta ne on merkittävä sulkeisiin. Voimme noudattaa tätä rakennetta ehtolauseen luomiseksi:

variable_name[(conditional_statement)]

Kun muuttujan_nimi viittaa lausekkeessa käytettävään muuttujaan, luomme loogisen lausekkeen, esimerkiksi muuttujan_nimi > 0. Lopuksi käytämme hakasulkeita loogisen lausekkeen viimeistelemiseen. Alla on esimerkki loogisesta lausekkeesta.

Esimerkki 1: Vertaa vektorin jokaista elementtiä

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

lähtö:

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

Yllä olevassa tulosteessa R lukee jokaisen arvon ja vertaa sitä lausekkeeseen logical_vector>5. Jos arvo on ehdottomasti suurempi kuin viisi, ehto on TOSI, muuten EPÄTOSI. R palauttaa vektorin, jossa on TOSI ja EPÄTOSI.

Esimerkki 2: Säilytä vain vastaavat elementit

Alla olevassa esimerkissä haluamme kokeillatract arvot, jotka täyttävät vain ehdon 'on ehdottomasti suurempi kuin viisi'. Tätä varten voimme kääriä ehdon hakasulkeisiin, joita edeltää arvot sisältävä vektori.

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

lähtö:

## [1]  6  7  8  9 10

Esimerkki 3: Yhdistä kaksi ehtoa

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

lähtö:

## [1] 5 6

Esimerkissä 3 käytetään yksinkertaista et-merkkiä & tarkoituksella. Yksimerkkiset operaattorit & ja | vertailevat vektoreita elementti elementiltä ja palauttavat vektorin, jota osajoukko tarvitsee. Tuplamuodot && ja || palauttavat yhden arvon ja kuuluvat if()- ja while()-ehtoihin. Koska R 4.3.0Yhtä elementtiä pidemmän argumentin välittäminen &&- tai ||-operaattorille on virhe pikemminkin kuin varoitus, joten nämä kaksi operaattoriperhettä eivät ole enää keskenään vaihdettavissa. !-operaattori kieltää ehdon ja xor() antaa poissulkevan TAI-operaattorin.

R-tehtävä OperaTors

Sijoitusoperaattorit sitovat arvon nimeen. R tarjoaa niitä enemmän kuin useimmat kielet, ja eroilla on merkitystä, kun koodi siirtyy tehtävät.

OperaTor Tuotetiedot
<- Vasen sijoitus, idiomaattinen valinta R:ssä
= Vasen sijoitus, mutta normaalisti varattu funktion argumenteille
-> Oikea määritys, pätevä, mutta harvoin käytetty
<<- Ylimääräinen määritys, joka hakee ympäröivistä ympäristöistä
- >> Oikea supersijoitus
# 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

Tyylioppaat suosittelevat <--merkkiä objektien luomiseen ja =-merkkiä argumenttien nimeämiseen kutsun sisällä, koska roolit pysyvät tällöin visuaalisesti erillisinä. Käytä <<--merkkiä säästeliäästi: se muuttaa objektia nykyisen funktion ulkopuolella ja tekee koodista vaikeamman päätellä. Kun sijoittelu ja tyypit ovat tuttuja, seuraavat vaiheet ovat reaalidatan tuonti ja reshaping sen kanssa dplyr; R-kielen yleiskatsaus asettaa koko työkaluketjun kontekstiin.

UKK

Vektori sisältää vain yhden tyyppisiä elementtejä, ja tyyppien sekoittaminen pakottaa tähän. Lista sisältää mitä tahansa kussakin paikassa, mukaan lukien muut listat, datakehykset tai funktiot, minkä vuoksi malliobjektit ovat listoja.

Kun kaksi eripituista vektoria kohtaavat operaattorin, R toistaa lyhyempää vektoria, kunnes pituudet vastaavat toisiaan. c(1,2,3,4) + c(1,2) antaa tulokseksi 2 4 4 6. Varoitus tulee näkyviin vain, jos pidempi pituus ei ole monikerta.

NA merkitsee puuttuvaa arvoa vektorin sisällä. NULL merkitsee objektin puuttumista ja sen pituus on nolla. NaN on määrittelemätön numeerinen tulos, kuten 0/0. Inf on jakolasku nollalla, kuten 1/0.

%in% -operaattori testaa jäsenyyttä ja palauttaa TOSI jokaiselle oikeanpuoleisessa vektorissa olevalle vasemmanpuoleiselle alkiolle. c(2,7) %in% c(1,2,3) palauttaa TOSI ja EPÄTOSI. Se korvaa pitkät == -vertailujen ketjut, jotka on yhdistetty merkillä |.

Valitse matriisi numeerisille ruudukoille ja lineaarialgebralle a datakehys taulukoille, joiden sarakkeet eroavat tyypiltään, ja lista kun elementeillä on eri muotoja.

R 4.1.0:ssa esitelty |> siirtää vasemmalla olevan arvon oikealla olevan funktion ensimmäiseen argumenttiin. Se ketjuttaa vaiheita ilman sisäkkäisiä kutsuja eikä tarvitse pakettia, toisin kuin magrittr %>% -putki.

Tekoälyavustajat merkitsevät tyyppiristiriitoja, ehdottavat as.*-muunnoksia ja luonnostelevat uudelleenkoodauskoodia rivinäytteestä. He ehdottavat myös ominaisuuksien suunnitteluvaiheita ennen koneoppiminen malli on sovitettu. Tarkista aina luotu koodi dataasi vasten.

Kyllä. RStudio 2023.09.0 ja uudemmat versiot toimitetaan GitHub Copilot integrointi, joka suorittaa R-lausekkeet suoraan. Edellyttää Copilot-tilausta, ja järjestelmänvalvojien on otettava se käyttöön RStudio Serverissä tai Posit Workbenchissä.

Tiivistä tämä viesti seuraavasti: