Vrste podataka u R s primjerom

⚡ Pametni sažetak

Tipovi podataka u R-u definiraju kako se vrijednosti pohranjuju u memoriju, a operatori odlučuju što R može s njima učiniti. Ovdje su obrađeni vektori, varijable, aritmetički, relacijski, logički i operatori dodjeljivanja s primjerima koji se mogu izvesti.

  • 🔘 Atomvrste IC-a: R pohranjuje svaku vrijednost kao logičku, cjelobrojnu, dvostruku, kompleksnu, znakovnu ili sirovu.
  • ☑️ Provjera tipa: class(), typeof() i mode() opisuju vrijednost iz tri različita kuta.
  • ✅ Vektori: Funkcija c() gradi jednodimenzionalnu kolekciju u kojoj svaki element dijeli jedan tip.
  • 🧪 Operatorovi: Aritmetički, relacijski, logički i operatori dodjeljivanja pokrivaju gotovo svaki osnovni R izraz.
  • 🛠️ Podskup: Uglate zagrade u kombinaciji s logičkim uvjetom filtriraju vektorske elemente u jednom retku.
  • ⚠️ Napomena o verziji: R 4.3.0 je argument duljine veće od jedan za && ili || pretvorio u grešku.

Tipovi podataka u R-u

Koji su tipovi podataka u R-u?

Slijede tipovi podataka ili strukture podataka u R programiranju:

Taj popis miješa dvije povezane ideje, a njihovo odvajanje olakšava praćenje ostatka ove stranice. tip podataka opisuje što je pojedinačna vrijednost - broj, dio teksta, TOČNO ili NETOČNO. struktura podataka opisuje koliko se vrijednosti drži zajedno i u kojem obliku. Skalari, vektori, matrice, okviri podataka i liste su strukture; vrijednosti unutar njih i dalje pripadaju jednom od osnovnih tipova R-a.

Struktura Dimenzije Jesu li dopuštene miješane vrste? Tipična upotreba
skalar Vektor duljine 1 Ne Jedno mjerenje ili zastavica
vektor 1 Ne Stupac očitanja jedne vrste
Distributori 2 Ne Numeričke mreže i linearna algebra
Okvir podataka 2 Da, jedna vrsta po stupcu Tablični skupovi podataka
Popis 1, ali ugnijezdivo Da, bilo što po elementu Rezultati modela i miješani spremnici

R nema zaseban tip skalara: skalar je jednostavno vektor duljine jedan, zbog čega se toliko R koda piše za cijele vektore odjednom.

Osnovni tipovi podataka u R-u

Svaka vrijednost u R pripada jednom od malog skupa osnovnih (atomskih) tipova:

  • 4.5 je decimalna vrijednost koja se naziva numerički zapis.
  • Broj 4 izgleda kao cijeli broj, ali R ga i dalje pohranjuje kao dvostruki broj. Napišite 4L kada je potreban pravi cijeli broj.
  • TRUE ili FALSE je logička vrijednost, koja se u R-u naziva logička vrijednost.
  • Vrijednost unutar ” ” ili ' ’ je tekst (niz znakova). Te vrijednosti nazivaju se znakovi.

Dva dodatna tipa upotpunjuju skup. Kompleksne vrijednosti poput 3+2i sadrže realni i imaginarni dio, a sirove vrijednosti sadrže bajtove. Obje se rijetko pojavljuju u svakodnevnoj analizi, ali su navedene u osnovnom R-u. dokumentacija za typeof() uz četiri uobičajene vrste.

Tip Primjer vrijednosti class() vraća typeof() vraća
logičan TRUE logičan logičan
Integer 4L cijeli cijeli
Double (numerički) 4.5 numerički dvostruko
Lik "R je fantastičan" lik lik
Kompleks 3+2i kompleks kompleks
Sirov kao.sirovo(10) sirov sirov

Tip varijable možemo provjeriti pomoću funkcije klase.

Primjer 1: Provjera numeričke varijable

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

Izlaz:

## [1] "numeric"

Primjer 2: Provjera znakovne varijable

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

Izlaz:

## [1] "character"

Primjer 3: Provjera logičke varijable

# Boolean
z <- TRUE
class(z)

Izlaz:

## [1] "logical"

Imajte na umu da class() odgovara s "numeric" za 28 iako 28 nema decimalni dio. R ga je pohranio kao double, a samo typeof() to otkriva. Sljedeća razlika koju vrijedi naučiti je kako te vrijednosti dobivaju imena.

Varijable u R-u

Varijable su jedan od osnovnih gradivnih blokova u R-u koji pohranjuju vrijednosti i važne su svima koji se bave znanošću o podacima. Varijabla u R-u može pohraniti broj, objekt, statistički rezultat, vektor, skup podataka ili predviđanje modela - u osnovi sve što R ispisuje. Tu varijablu možemo kasnije koristiti jednostavnim pozivanjem naziva varijable.

Za deklariranje varijable u R-u, moramo joj dodijeliti naziv. Naziv ne smije sadržavati razmak. Možemo koristiti znak _ za spajanje dvije riječi.

Imena mogu sadržavati slova, znamenke, točke i podvlake, ali moraju započeti slovom ili točkom, a rezervirane riječi poput TRUE, FALSE i NULL ne mogu se koristiti kao imena. Za dodavanje vrijednosti varijabli koristite <- ili =.

Evo sintakse:

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

U naredbenom retku možemo napisati sljedeće kodove da vidimo što će se dogoditi:

Primjer 1: Dodijelite vrijednost i ispiši je

# Print variable x
x <- 42
x

Izlaz:

## [1] 42

Primjer 2: Deklariranje druge varijable

y  <- 10
y

Izlaz:

## [1] 10

Primjer 3: Korištenje dvije varijable u jednom izrazu

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

Izlaz:

## [1] 32

Varijabla koja sadrži nekoliko vrijednosti istog tipa je vektor, što je struktura koju očekuje gotovo svaka R funkcija.

Vektori u R-u

Vektor je jednodimenzionalna kolekcija u kojoj svaki element dijeli isti tip. Možemo stvoriti vektor sa svim osnovnim R tipovima podataka koje smo ranije naučili. Najjednostavniji način za izgradnju vektora u R-u je korištenje funkcije c().

Primjer 1: Stvaranje numeričkog vektora

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

Izlaz:

## [1]  1 10 49

Primjer 2: Izrada vektora znakova

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

Izlaz:

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

Primjer 3: Stvaranje logičkog vektora

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

Izlaz:

##[1] TRUE FALSE TRUE

Ako c() primi mješavinu tipova, ne doživi grešku. Tiho prisiljava svaki element na najopćenitiji tip koji je prisutan, tako da c(1, "a", TRUE) postaje vektor znakova. Također možemo izvoditi aritmetičke izračune na vektorima u R-u.

Primjer 4: Zbrajanje dva vektora element po 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

Izlaz:

[1]  3  7 11

Zbrajanje se izvršavalo element po element jer oba vektora imaju istu duljinu. Kada se duljine razlikuju, R reciklira kraći vektor, ponavljajući ga dok se ne podudara s duljim i upozorava samo kada dulja duljina nije višekratnik kraće.

Primjer 5: Rastavljanje prvih pet elemenata

U R-u je moguće razrezati vektor. U nekim slučajevima zanima nas samo prvih pet elemenata vektora. Možemo koristiti naredbu [1:5] za prikaztracvrijednosti od 1 do 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]

Izlaz:

## [1] 1 2 3 4 5

Primjer 6: Izgradite raspon s dvotočkom Operahumka

Najkraći način za stvaranje raspona vrijednosti je korištenje operatora dvotočke (:) između dva broja. Na primjer, iz gornjeg primjera možemo napisati c(1:10) za stvaranje vektora vrijednosti od jedan do deset.

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

Izlaz:

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

Budući da vektor tiho mijenja tip kada se miješa, isplati se znati kako pregledati i pretvoriti tipove na zahtjev.

Kako provjeriti i pretvoriti tipove podataka u R-u

Tri obitelji funkcija odgovaraju na tri pitanja koja se stalno pojavljuju: što je ovo, je li ovo zadanog tipa i može li ovo postati drugi tip.

Obitelj funkcija Pitanje na koje odgovara Primjeri
klasa(), tip(), način() Koje je vrste ova vrijednost? klasa(28), tip(28), način(28)
je.*() Je li ova vrijednost tipa X? je.brojčani(), je.znakovni(), je.logički()
kao.*() Može li ova vrijednost postati tipa X? kao.broj(), kao.znak(), kao.cijeli broj()
str() Kako ovaj objekt izgleda općenito? str(broj_broja)
# 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

Dva pravila objašnjavaju većinu iznenađenja ovdje. Prvo, class() izvještava o klasi koja se koristi za otpremu metode, dok typeof() izvještava o internoj memoriji, zbog čega je 28 "numeric" za jednu i "double" za drugu. Drugo, konverzija koja ne može uspjeti ne zaustavlja skriptu: as.numeric("abc") vraća NA i ispisuje upozorenje o prisili, pa su tihi NA nakon uvoza gotovo uvijek problem s tipom. Ista logika pokreće čimbenici, koji pohranjuju kategorije kao cjelobrojne kodove plus tablicu razina.

Nakon što smo odredili tipove, sljedeći su operatori koji na njih djeluju.

R Aritmetika Operaulagatelji

Prvo ćemo vidjeti osnovne aritmetičke operatore u R-u. Slijede aritmetički operatori u R programiranju i što oni znače:

Operahumka Description
+ Dodatak
- ispodtracANJE
* Množenje
/ Podjela
^ ili ** eksponenciranje
%% Modulo (ostatak nakon dijeljenja)
%/% Cjelobrojno dijeljenje (količnik, ostatak se odbacuje)

Svaki od ovih operatora je vektoriziran, tako da isti izraz funkcionira na jednoj vrijednosti ili na cijelom stupcu.

Primjer 1: Zbrajanje

# An addition
3 + 4

Izlaz:

## [1] 7

Gornji R kod možete jednostavno kopirati i zalijepiti u RStudio Konzola. U ovom članku izlaz je prikazan u retcima koji počinju s ##. Na primjer, ako napišemo kod print("Guru99") konzola ispisuje [1] "Guru99", što bi ova stranica prikazala kao ## [1] "Guru99 ".

Znak ## označava redak ispisa, a broj u uglatoj zagradi ([1]) je indeks prve vrijednosti u tom retku, a ne dio rezultata.

Rečenice koje počinju s # su komentari. Možemo koristiti # unutar R skripte za dodavanje bilo koje bilješke, a R je ignorira tijekom izvođenja.

Primjer 2: Množenje

# A multiplication
3*5

Izlaz:

## [1] 15

Primjer 3: Dijeljenje

# A division
(5+5)/2

Izlaz:

## [1] 5

Primjer 4: Potenciranje

# Exponentiation
2^5

Izlaz:

## [1] 32

Primjer 5: Modulo

# Modulo
28%%6

Izlaz:

## [1] 4

Aritmetika daje brojeve. Sljedeća skupina operatora umjesto toga daje TRUE i FALSE.

R Relacijski (Usporedba) Operaulagatelji

Relacijski operatori uspoređuju dvije vrijednosti i vraćaju logičan rezultat. To su operatori koji grade uvjete korištene za filtriranje i vektoriziraju se na potpuno isti način kao i aritmetički operatori.

Operahumka Description
> Veći od
< Less od
>= Veći od ili jednak
<= Less nego ili jednako
== Točno jednako
!= Nije jednako
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

Dvije navike ovdje štede vrijeme. Koristite == za usporedbu i <- za dodjelu, jer je jednostruki = unutar uvjeta česta početnička pogreška. I izbjegavajte == na dvostrukim brojevima: zaokruživanje s pomičnim zarezom znači da je 0.1 + 0.2 == 0.3 NETOČNO, pa je isTRUE(all.equal(0.1 + 0.2, 0.3)) siguran test. Usporedbe na sortirani okviri podataka slijediti ista pravila.

R Logično Operaulagatelji

S logičkim operatorima želimo vratiti vrijednosti unutar vektora na temelju logičkih uvjeta. Tablica u nastavku navodi logičke operatore dostupne u R-u.

Referentna tablica logičkih i relacijskih operatora u R-u s njihovim značenjima

Logičke naredbe u R-u su unutar znaka [. Možemo dodati onoliko uvjetnih naredbi koliko želimo, ali ih moramo uključiti u zagrade. Možemo slijediti ovu strukturu za stvaranje uvjetne naredbe:

variable_name[(conditional_statement)]

S varijable_name koja se odnosi na varijablu koju želimo koristiti za naredbu, stvaramo logičku naredbu, na primjer varijable_name > 0. Na kraju, koristimo uglate zagrade za dovršetak logičke naredbe. U nastavku je primjer logičke naredbe.

Primjer 1: Usporedite svaki element vektora

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

Izlaz:

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

U gornjem izlazu, R čita svaku vrijednost i uspoređuje je s naredbom logical_vector>5. Ako je vrijednost strogo veća od pet, tada je uvjet TRUE, inače FALSE. R vraća vektor TRUE i FALSE.

Primjer 2: Zadržite samo elemente koji se podudaraju

U donjem primjeru želimo extracvrijednosti koje zadovoljavaju samo uvjet 'strogo je veće od pet'. Za to možemo uvjet staviti unutar uglatih zagrada ispred kojih se nalazi vektor koji sadrži vrijednosti.

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

Izlaz:

## [1]  6  7  8  9 10

Primjer 3: Kombiniranje dvaju uvjeta

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

Izlaz:

## [1] 5 6

Primjer 3 namjerno koristi jedan ampersand &. Jednoznakovni operatori & i | uspoređuju vektore element po element i vraćaju vektor, što je ono što podskupljanju treba. Dvostruki oblici && i || vraćaju jednu vrijednost i pripadaju uvjetima if() i while(). Budući da R 4.3.0, prosljeđivanje argumenta duljeg od jednog elementa operatorima && ili || predstavlja grešku, a ne upozorenje, tako da te dvije porodice operatora više nisu zamjenjive. Operator ! negira uvjet, a xor() daje isključivo ILI.

Zadatak R Operaulagatelji

Operatori dodjeljivanja vežu vrijednost za ime. R ih nudi više od većine jezika, a razlike postaju bitne kada se kod proširi. Funkcije.

Operahumka Description
<- Lijevo dodjeljivanje, idiomatski izbor u R-u
= Lijeva dodjela, ali obično rezervirana za argumente funkcije
-> Dodjeljivanje ispravnosti, valjano, ali rijetko korišteno
<<- Superdodjela koja pretražuje okolna okruženja
- >> Desna superasignacija
# 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

Stilski vodiči preporučuju <- za stvaranje objekata i = za imenovanje argumenata unutar poziva, jer tada dvije uloge ostaju vizualno različite. Koristite <<- rijetko: mijenja objekt izvan trenutne funkcije i otežava razmišljanje o kodu. Nakon što su dodjela i tipovi ugodni, sljedeći koraci su uvoz stvarnih podataka i reshaping to sa dplyr; Pregled R jezika stavlja cijeli lanac alata u kontekst.

Pitanja i odgovori

Vektor sadrži elemente samo jednog tipa, a miješanje tipova prisiljava na izvršavanje. Lista sadrži bilo što u svakom utoru, uključujući druge liste, okvire podataka ili funkcije, zbog čega su objekti modela liste.

Kada dva vektora različitih duljina susretnu operator, R ponavlja kraći dok se duljine ne podudaraju. c(1,2,3,4) + c(1,2) daje 2 4 4 6. Upozorenje se pojavljuje samo kada dulja duljina nije višekratnik.

NA označava vrijednost koja nedostaje unutar vektora. NULL označava odsutnost objekta i ima nultu duljinu. NaN je nedefiniran numerički rezultat kao što je 0/0. Inf je dijeljenje s nulom, kao u 1/0.

Operator %in% provjerava pripadnost i vraća TRUE za svaki lijevi element pronađen u desnom vektoru. c(2,7) %in% c(1,2,3) vraća TRUE FALSE. Zamjenjuje duge lance usporedbi == spojene s |.

Odaberite matrica za numeričke mreže i linearnu algebru, a podatkovni okvir za tablice čiji se stupci razlikuju po vrsti i popis kada elementi imaju različite oblike.

Uveden u R 4.1.0, |> prosljeđuje vrijednost s lijeve strane u prvi argument funkcije s desne strane. Povezuje korake bez ugniježđivanja poziva i ne treba mu paket, za razliku od magrittr %>% cijevi.

AI asistenti označavaju neusklađenosti tipova, predlažu as.* konverzije i izrađuju nacrt koda za prekodiranje iz uzorka redaka. Također predlažu korake inženjeringa značajki prije stroj za učenje model je postavljen. Uvijek usporedite generirani kod s vašim podacima.

Da. RStudio 2023.09.0 i novije verzije isporučuju GitHub kopilot integracija koja dovršava R izraze inline. Potrebna je pretplata na Copilot, a administratori je moraju omogućiti na RStudio Serveru ili Posit Workbenchu.

Sažmite ovu objavu uz: