Tipuri de date în R cu Exemplu

⚡ Rezumat inteligent

Tipurile de date din R definesc modul în care valorile sunt stocate în memorie, iar operatorii decid ce poate face R cu ele. Vectorii, variabilele, operatorii aritmetici, relaționali, logici și de atribuire sunt tratați aici cu exemple rulabile.

  • 🔘 Atomtipuri de circuite integrate: R stochează fiecare valoare ca valoare logică, întreagă, dublă, complexă, caracter sau brută.
  • ☑️ Verificarea tipului: class(), typeof() și mode() descriu o valoare din trei unghiuri diferite.
  • Vectorii: Funcția c() construiește o colecție unidimensională în care fiecare element are același tip.
  • 🧪 Operators: Operatorii aritmetici, relaționali, logici și de atribuire acoperă aproape fiecare expresie de bază R.
  • 🛠️ Subcategorie: Paranteze pătrate combinate cu elemente vectoriale de filtru de condiții logice pe o singură linie.
  • ⚠️ Notă privind versiunea: R 4.3.0 a transformat un argument cu lungime mai mare decât unu în && sau || într-o eroare.

Tipuri de date în R

Care sunt tipurile de date din R?

Următoarele sunt tipurile de date sau structurile de date în programarea R:

Această listă combină două idei corelate, iar separarea lor face ca restul paginii să fie mai ușor de urmărit. tip de date descrie ce este o singură valoare — un număr, un fragment de text, un ADEVĂRAT sau un FALS. A structură de date descrie câte valori sunt ținute împreună și în ce formă. Scalarele, vectorii, matricile, cadrele de date și listele sunt structuri; valorile din interiorul lor aparțin în continuare unuia dintre tipurile de bază ale lui R.

Structure Dimensiuni Sunt permise tipuri mixte? Utilizare tipică
mărime scalară Vector de lungime 1 Nu O singură măsurătoare sau steag
Vector 1 Nu O coloană de citiri de un singur tip
Matrice 2 Nu Grile numerice și algebră liniară
Cadrul de date 2 Da, un tip pe coloană Seturi de date tabelare
Listă 1, dar imbricabil Da, orice per element Rezultate model și containere mixte

R nu are un tip scalar separat: un scalar este pur și simplu un vector de lungime unu, motiv pentru care se scrie atât de mult cod R pentru vectori întregi simultan.

Tipuri de date de bază în R

Fiecare valoare din R aparține unuia dintr-un mic set de tipuri (atomice) de bază:

  • 4.5 este o valoare zecimală numită numeric.
  • 4 pare un număr întreg, dar R îl stochează totuși ca un dublu. Scrieți 4L când este necesar un număr întreg adevărat.
  • ADEVĂRAT sau FALS este o valoare booleană, numită logică în R.
  • Valoarea din interiorul caracterelor „ ” sau „ ' este text (un șir de caractere). Aceste valori se numesc caractere.

Alte două tipuri completează setul. Valorile complexe, cum ar fi 3+2i, conțin o parte reală și una imaginară, iar valorile brute conțin octeți. Ambele apar rar în analiza zilnică, dar sunt listate în baza R. documentația typeof() alături de cele patru tipuri comune.

Tip Valoare exemplu class() returnează typeof() returnează
Logic TRUE logic logic
Întreg 4L întreg întreg
Double (numeric) 4.5 numeric dubla
Caracter „R este fantastic” caracter caracter
Complex 3+2i complex complex
Crud ca.brut(10) crud crud

Putem verifica tipul unei variabile cu funcția de clasă.

Exemplul 1: Verificarea unei variabile numerice

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

ieșire:

## [1] "numeric"

Exemplul 2: Verificarea unei variabile de tip caracter

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

ieșire:

## [1] "character"

Exemplul 3: Verificarea unei variabile logice

# Boolean
z <- TRUE
class(z)

ieșire:

## [1] "logical"

Rețineți că class() răspunde cu „numeric” pentru 28, chiar dacă 28 nu are parte zecimală. R a stocat-o ca double, și doar typeof() dezvăluie acest lucru. Următoarea diferență care merită învățată este modul în care aceste valori primesc nume.

Variabile în R

Variabilele sunt unul dintre elementele de bază din R care stochează valori și sunt importante pentru oricine lucrează în știința datelor. O variabilă în R poate stoca un număr, un obiect, un rezultat statistic, un vector, un set de date sau o predicție de model - practic orice produs R are ca rezultat. Putem folosi acea variabilă ulterior, pur și simplu apelând numele variabilei.

Pentru a declara o variabilă în R, trebuie să atribuim un nume de variabilă. Numele nu trebuie să conțină spațiu. Putem folosi semnul _ pentru a uni două cuvinte.

Numele pot conține litere, cifre, puncte și sublinieri, dar trebuie să înceapă cu o literă sau un punct, iar cuvinte rezervate precum TRUE, FALSE și NULL nu pot fi folosite ca nume. Pentru a adăuga o valoare variabilei, utilizați <- sau =.

Iată sintaxa:

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

În linia de comandă, putem scrie următoarele coduri pentru a vedea ce se întâmplă:

Exemplul 1: Atribuiți o valoare și afișați-o

# Print variable x
x <- 42
x

ieșire:

## [1] 42

Exemplul 2: Declararea unei a doua variabile

y  <- 10
y

ieșire:

## [1] 10

Exemplul 3: Utilizarea a două variabile într-o singură expresie

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

ieșire:

## [1] 32

O variabilă care conține mai multe valori de același tip este un vector, care este structura așteptată de aproape fiecare funcție R.

Vectori în R

Un vector este o colecție unidimensională în care fiecare element are același tip. Putem crea un vector cu toate tipurile de date R de bază învățate anterior. Cea mai simplă modalitate de a construi un vector în R este de a utiliza funcția c().

Exemplul 1: Crearea unui vector numeric

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

ieșire:

## [1]  1 10 49

Exemplul 2: Crearea unui vector de caractere

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

ieșire:

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

Exemplul 3: Crearea unui vector logic

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

ieșire:

##[1] TRUE FALSE TRUE

Dacă c() primește o combinație de tipuri, nu eșuează. Forțează discret fiecare element până la cel mai general tip prezent, astfel încât c(1, "a", TRUE) devine un vector de caractere. De asemenea, putem face calcule aritmetice pe vectori în R.

Exemplul 4: Adunarea a doi vectori element cu 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

ieșire:

[1]  3  7 11

Adunarea a funcționat element cu element deoarece ambii vectori au aceeași lungime. Când lungimile diferă, R reciclează vectorul mai scurt, repetând-o până când se potrivește cu cel mai lung și avertizează doar atunci când lungimea mai mare nu este un multiplu al celei mai scurte.

Exemplul 5: Secționarea primelor cinci elemente

În R, este posibil să se secționeze un vector. În unele cazuri, suntem interesați doar de primele cinci elemente ale unui vector. Putem folosi comanda [1:5] pentru a exprimatracvalorile de la 1 la 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]

ieșire:

## [1] 1 2 3 4 5

Exemplul 6: Construiți un interval cu ajutorul coloanelor OperaTdR

Cea mai scurtă metodă de a crea un interval de valori este utilizarea operatorului două puncte (:) între două numere. De exemplu, din exemplul de mai sus, putem scrie c(1:10) pentru a crea un vector de valori de la unu la zece.

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

ieșire:

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

Deoarece un vector își schimbă tipul în tăcere atunci când este amestecat, este important să știi cum să inspectezi și să converti tipurile la cerere.

Cum se verifică și se convertesc tipurile de date în R

Trei familii de funcții răspund la cele trei întrebări care apar constant: ce este aceasta, este aceasta de un anumit tip și poate deveni aceasta de un alt tip.

Familie de funcții Întrebare îi răspunde Exemple
class(), typeof(), mode() Ce tip este această valoare? clasă(28), tip(28), mod(28)
este.*() Este această valoare de tip X? is.numeric(), is.character(), is.logical()
ca.*() Poate această valoare să devină de tip X? as.numeric(), as.character(), as.integer()
str() Cum arată acest obiect în general? str(număr_vec)
# 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

Două reguli explică majoritatea surprizelor aici. În primul rând, class() raportează clasa utilizată pentru dispecerizarea metodelor, în timp ce typeof() raportează memoria internă, motiv pentru care 28 este „numeric” pentru una și „double” pentru cealaltă. În al doilea rând, o conversie care nu poate reuși nu oprește scriptul: as.numeric("abc") returnează NA și afișează un avertisment de coerciție, astfel încât NA-urile silențioase după un import sunt aproape întotdeauna o problemă de tip. Aceeași logică determină... factori, care stochează categoriile sub formă de coduri întregi plus un tabel de niveluri.

Odată ce tipurile sunt stabilite, următorii sunt operatorii care acționează asupra lor.

R Aritmetică Operatori

Vom vedea mai întâi operatorii aritmetici de bază în R. În continuare sunt prezentați operatorii aritmetici din programarea R și ce reprezintă aceștia:

OperaTdR Descriere
+ Plus
- SubtracTION
* Multiplicare
/ diviziune
^ sau ** Exponențierea
%% Modulo (restul după împărțire)
%/% Împărțire între numere întregi (cotient, rest eliminat)

Fiecare dintre acești operatori este vectorizat, deci aceeași expresie funcționează asupra unei singure valori sau asupra unei coloane întregi.

Exemplul 1: Adăugarea

# An addition
3 + 4

ieșire:

## [1] 7

Puteți copia și lipi cu ușurință codul R de mai sus în RStudio Consolă. În acest articol, ieșirea este afișată pe linii care încep cu ##. De exemplu, dacă scriem codul print("Guru99") consola afișează [1] "Guru99", pe care această pagină l-ar afișa ca ## [1] "Guru99“.

## marchează o linie a rezultatului imprimat, iar numărul din paranteză pătrată ([1]) este indicele primei valori de pe linia respectivă, nu face parte din rezultat.

Propozițiile care încep cu # sunt comentarii. Putem folosi # în interiorul unui script R pentru a adăuga orice notă dorim, iar R o ignoră la momentul execuției.

Exemplul 2: Înmulțirea

# A multiplication
3*5

ieșire:

## [1] 15

Exemplul 3: Diviziunea

# A division
(5+5)/2

ieșire:

## [1] 5

Exemplul 4: Exponențiere

# Exponentiation
2^5

ieșire:

## [1] 32

Exemplul 5: Modulo

# Modulo
28%%6

ieșire:

## [1] 4

Aritmetica produce numere. Următorul grup de operatori produce în schimb ADEVĂRAT și FALS.

R Relațional (Comparație) Operatori

Operatorii relaționali compară două valori și returnează un rezultat logic. Aceștia sunt operatorii care construiesc condițiile utilizate pentru filtrare și sunt vectorizați exact în același mod ca operatorii aritmetici.

OperaTdR Descriere
> Mai mare ca
< Less decât
>= Mai mare sau egal cu
<= Less decât sau egal cu
== Exact egal cu
!= Nu este egal cu
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

Două obiceiuri economisesc timp aici. Folosește == pentru comparație și <- pentru atribuire, deoarece un simplu = în interiorul unei condiții este o eroare frecventă pentru începători. Și evită == pe duble: rotunjirea în virgulă mobilă înseamnă că 0.1 + 0.2 == 0.3 este FALS, deci isTRUE(all.equal(0.1 + 0.2, 0.3)) este testul sigur. Comparații pe cadre de date sortate urmați aceleași reguli.

R logic Operatori

Cu operatorii logici, dorim să returnăm valori în interiorul vectorului pe baza unor condiții logice. Tabelul de mai jos listează operatorii logici disponibili în R.

Tabel de referință al operatorilor logici și relaționali din R cu semnificațiile lor

Instrucțiunile logice din R sunt încadrate între []. Putem adăuga oricâte instrucțiuni condiționale dorim, dar trebuie să le includem între paranteze. Putem urma această structură pentru a crea o instrucțiune condițională:

variable_name[(conditional_statement)]

Cu nume_variabilă referindu-ne la variabila pe care dorim să o folosim pentru instrucțiune, creăm instrucțiunea logică, de exemplu nume_variabilă > 0. În final, folosim paranteze pătrate pentru a finaliza instrucțiunea logică. Mai jos este un exemplu de instrucțiune logică.

Exemplul 1: Comparați fiecare element al unui vector

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

ieșire:

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

În rezultatul de mai sus, R citește fiecare valoare și o compară cu instrucțiunea logical_vector>5. Dacă valoarea este strict mai mare decât cinci, atunci condiția este TRUE, altfel FALSE. R returnează un vector de TRUE și FALSE.

Exemplul 2: Păstrați doar elementele care se potrivesc

În exemplul de mai jos, vrem să ex.tracvalorile care îndeplinesc doar condiția „este strict mai mare decât cinci”. Pentru aceasta, putem încadra condiția între paranteze pătrate precedate de vectorul care conține valorile.

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

ieșire:

## [1]  6  7  8  9 10

Exemplul 3: Combinați două condiții

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

ieșire:

## [1] 5 6

Exemplul 3 folosește intenționat simbolul ampersand simplu &. Operatorii cu un singur caracter & și | compară vectorii element cu element și returnează un vector, ceea ce este necesar pentru subseturi. Formele duble && și || returnează o valoare și aparțin condițiilor if() și while(). Deoarece R 4.3.0, transmiterea unui argument mai lung decât un element către && sau || este o eroare mai degrabă decât un avertisment, deci cele două familii nu mai sunt interschimbabile. Operatorul ! neagă o condiție, iar xor() dă un SAU exclusiv.

R Sarcină Operatori

Operatorii de atribuire leagă o valoare de un nume. R oferă mai mulți dintre aceștia decât majoritatea limbajelor de programare, iar diferențele contează odată ce codul se mută în funcții.

OperaTdR Descriere
<- Atribuirea la stânga, alegerea idiomatică în R
= Atribuire la stânga, dar în mod normal rezervată argumentelor funcției
-> Atribuire corectă, validă, dar rar utilizată
<< - Superatribuire care caută medii înglobante
- >> Superatribuire corectă
# 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

Ghidurile de stil recomandă <- pentru crearea obiectelor și = pentru denumirea argumentelor în interiorul unui apel, deoarece cele două roluri rămân apoi distincte vizual. Folosiți <<- cu moderație: modifică un obiect în afara funcției curente și face mai dificilă raționamentul asupra codului. Odată ce atribuirea și tipurile sunt familiare, următorii pași sunt importul de date reale și Reshaping cu dplyr; Prezentare generală a limbajului R pune întregul lanț de instrumente în context.

Întrebări frecvente

Un vector conține elemente de un singur tip, iar amestecarea tipurilor forțează coerciția. O listă conține orice în fiecare slot, inclusiv alte liste, cadre de date sau funcții, motiv pentru care obiectele modelului sunt liste.

Când doi vectori de lungimi diferite întâlnesc un operator, R îl repetă pe cel mai scurt până când lungimile se potrivesc. c(1,2,3,4) + c(1,2) dă 2 4 4 6. Un avertisment apare numai atunci când lungimea mai mare nu este un multiplu.

NA marchează o valoare lipsă în interiorul unui vector. NULL marchează absența unui obiect și are lungime zero. NaN este un rezultat numeric nedefinit, cum ar fi 0/0. Inf este împărțirea la zero, ca în 1/0.

Operatorul %in% testează apartenența și returnează TRUE pentru fiecare element din stânga găsit în vectorul din dreapta. c(2,7) %in% c(1,2,3) returnează TRUE FALSE. Înlocuiește lanțurile lungi de comparații == unite cu |.

Alege un matrice pentru grile numerice și algebră liniară, a cadru de date pentru tabele ale căror coloane diferă ca tip și a listă când elementele au forme diferite.

Introdusă în R 4.1.0, funcția |> transmite valoarea din stânga sa în primul argument al funcției din dreapta sa. Aceasta înlănțuie pași fără apeluri imbricate și nu necesită niciun pachet, spre deosebire de pipe-ul magrittr %>%.

Asistenții AI semnalează neconcordanțele de tip, sugerează conversii as.* și redactează codul de recodificare dintr-un eșantion de rânduri. De asemenea, propun pași de inginerie a caracteristicilor înainte de... masina de învățare Modelul este ajustat. Verificați întotdeauna codul generat în raport cu datele dvs.

Da. RStudio 2023.09.0 și versiunile ulterioare includ Copilotul GitHub integrare care completează expresiile R inline. Este necesar un abonament Copilot, iar administratorii trebuie să îl activeze pe RStudio Server sau Posit Workbench.

Rezumați această postare cu: