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.

Mitkä ovat R:n tietotyypit?
Seuraavat ovat R-ohjelmoinnin tietotyypit tai tietorakenteet:
- skalaarit
- Vektorit (numeerinen, merkki, looginen)
- matriisit
- Tietokehykset
- Listat
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.
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.

