Cum să faci bucla prin lista în R cu Base R și ronar: un ghid cuprinzător pentru începători

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

Programarea R a devenit un instrument esențial în lumea analizei datelor, oferind capabilități puternice pentru manipularea și analiza seturi de date complexe. Una dintre abilitățile fundamentale pe care programatorii R începători trebuie să le stăpânească este abilitatea de a parcurge liste în mod eficient. Acest articol vă va ghida prin procesul de buclă prin liste în R folosind atât funcțiile de bază R, cât și cele populare purrr pachet, completat cu exemple practice și cele mai bune practici.

Înțelegerea listelor în R

Înainte de a ne aprofunda în tehnicile de buclă, este crucial să înțelegem ce liste sunt în R. Spre deosebire de vectori sau cadre de date, care sunt omogene (conțin elemente de același tip), listele din R sunt structuri de date eterogene. Aceasta înseamnă că pot conține elemente de diferite tipuri, inclusiv alte liste, făcându-le incredibil de versatile pentru stocarea datelor complexe.

# Example of a list in R
my_list <- list(
  numbers = c(1, 2, 3),
  text = "Hello, R!",
  data_frame = data.frame(x = 1:3, y = c("a", "b", "c"))
)
my_list
$numbers
(1) 1 2 3

$text
(1) "Hello, R!"

$data_frame
  x y
1 1 a
2 2 b
3 3 c

De ce să faci bucla prin liste?

Buclă prin liste este o sarcină comună în programarea R din mai multe motive: 1. Procesarea datelor: Când lucrați cu structuri de date imbricate sau date asemănătoare JSON. 2. Aplicarea funcțiilor: Pentru a efectua aceeași operație pe mai multe elemente. 3. Ingineria caracteristicilor: Crearea de noi variabile pe baza elementelor listei. 4. Agregarea datelor: combinarea rezultatelor din mai multe analize stocate într-o listă.

Construcții în buclă în R

R oferă mai multe moduri de a parcurge liste. Ne vom concentra pe două abordări principale: 1. Bucle de bază R (for şi while) 2. Programare funcțională cu purrr pachet

Folosind Base R pentru trecerea în buclă a listelor

Bucla For în baza R

The for bucla este una dintre cele mai de bază și mai utilizate constructe de buclă din R.

Exemplul 1: Calcularea pătratelor de numere dintr-o listă

numbers_list <- list(1, 2, 3, 4, 5)
squared_numbers <- vector("list", length(numbers_list))

for (i in seq_along(numbers_list)) {
  squared_numbers((i)) <- numbers_list((i))^2
}

print(squared_numbers)
((1))
(1) 1

((2))
(1) 4

((3))
(1) 9

((4))
(1) 16

((5))
(1) 25

While Loop în baza R

Buclele în timp ce sunt utile atunci când trebuie să continuați să repetați până când este îndeplinită o anumită condiție.

Exemplul 2: Găsirea primului număr mai mare de 10 dintr-o listă

numbers_list <- list(2, 4, 6, 8, 10, 12, 14)
index <- 1

while (numbers_list((index)) <= 10) {
  index <- index + 1
}

print(paste("The first number greater than 10 is:", numbers_list((index))))
(1) "The first number greater than 10 is: 12"

Introducere în pachetul Purrr

The purrr pachetul, parte a ecosistemului tidyverse, oferă un set de instrumente pentru lucrul cu funcții și vectori în R. Oferă o abordare mai consecventă și mai lizibilă a iterației peste liste.

A folosi purrrmai întâi instalați și încărcați pachetul:

#install.packages("purrr")
library(purrr)

Looping Through Lists cu torc

Folosind funcția map().

The map() funcția este calul de bătaie al purrrpermițându-vă să aplicați o funcție fiecărui element dintr-o listă.

Exemplul 3: Aplicarea unei funcții fiecărui element dintr-o listă

numbers_list <- list(1, 2, 3, 4, 5)

squared_numbers <- map(numbers_list, function(x) x^2)
# Or using the shorthand notation:
# squared_numbers <- map(numbers_list, ~.x^2)

print(squared_numbers)
((1))
(1) 1

((2))
(1) 4

((3))
(1) 9

((4))
(1) 16

((5))
(1) 25

Folosind funcțiile map2() și pmap().

map2() şi pmap() sunt utile atunci când trebuie să repetați mai multe liste simultan.

Exemplu: Combinarea elementelor din două liste

names_list <- list("Alice", "Bob", "Charlie")
ages_list <- list(25, 30, 35)

introduce <- map2(names_list, ages_list, ~paste(.x, "is", .y, "years old"))
print(introduce)
((1))
(1) "Alice is 25 years old"

((2))
(1) "Bob is 30 years old"

((3))
(1) "Charlie is 35 years old"

Comparând Base R și torc

Când decideți între buclele R de bază și purrr funcții, luați în considerare:

  1. Performanţă: Pentru operații simple, bucle R de bază și purrr funcțiile funcționează în mod similar. Pentru operatii complexe, purrr poate fi mai eficient.
  2. Lizibilitate: purrr funcțiile conduc adesea la un cod mai concis și mai ușor de citit, în special pentru operațiuni complexe.
  3. Consecvență: purrr oferă o interfață consistentă pentru lucrul cu liste și alte structuri de date.

Capcane comune și depanare

  1. Am uitat să folosești paranteze duble (()) pentru indexarea listelor: Folosește list((i)) în loc de list(i) pentru a accesa elementele listei.
  2. Nu se pre-aloca ieșirea: pentru liste mari, pre-alocați lista de rezultate pentru o performanță mai bună.
  3. Ignorarea gestionării erorilor: Folosește safely() sau possibly() din purrr pentru a trata erorile cu grație.

Rândul tău!

Acum este timpul să exersați! Încercați să rezolvați această problemă:

Problemă: Aveți o listă de vectori care conțin temperaturi în Celsius. Convertiți fiecare temperatură în Fahrenheit folosind atât o buclă R de bază, cât și a purrr funcţie.

temp_list <- list(c(20, 25, 30), c(15, 18, 22), c(28, 32, 35))

# Your code here

# Solution will be provided below

Soluţie:

# Base R solution
fahrenheit_base <- vector("list", length(temp_list))
for (i in seq_along(temp_list)) {
  fahrenheit_base((i)) <- (temp_list((i)) * 9/5) + 32
}

# purrr solution
fahrenheit_purrr <- map(temp_list, ~(.x * 9/5) + 32)

# Check results
print(fahrenheit_base)
((1))
(1) 68 77 86

((2))
(1) 59.0 64.4 71.6

((3))
(1) 82.4 89.6 95.0
print(fahrenheit_purrr)
((1))
(1) 68 77 86

((2))
(1) 59.0 64.4 71.6

((3))
(1) 82.4 89.6 95.0

Fast Takeaways

  1. Listele din R pot conține elemente de diferite tipuri.
  2. Oferte Base R for şi while bucle pentru iterare prin liste.
  3. The purrr pachetul oferă instrumente de programare funcționale, cum ar fi map() pentru operațiuni de listă.
  4. Alegeți între baza R și purrr bazat pe lizibilitate, performanță și preferințe personale.
  5. Practica este cheia pentru stăpânirea manipulării listelor în R.

Concluzie

Stăpânirea artei de a parcurge liste în R este o abilitate crucială pentru orice analist de date sau programator care lucrează cu acest limbaj versatil. Indiferent dacă alegeți să utilizați buclele R de bază sau abordarea mai funcțională a purrrînțelegerea acestor tehnici vă va îmbunătăți semnificativ capacitatea de a manipula și analiza structuri complexe de date. Amintiți-vă, cel mai bun mod de a vă îmbunătăți este prin practică și experimentare. Continuați să codificați și nu ezitați să explorați resursele vaste disponibile în comunitatea R!

Întrebări frecvente

  1. Care este diferența dintre o listă și un vector în R? Listele pot conține elemente de diferite tipuri, în timp ce vectorii sunt omogene și conțin elemente de același tip.

  2. Pot folosi bucle cu cadre de date în R? Da, buclele pot fi folosite cu cadre de date, adesea prin iterare pe rânduri sau coloane. Cu toate acestea, pentru multe operațiuni, este mai eficient să folosiți funcții vectorizate sau apply funcții familiale.

  3. Este toarta mai rapid decât buclele R de bază? Pentru operații simple, diferența de performanță este neglijabilă. Cu toate acestea, purrr poate fi mai eficient pentru operațiuni complexe și oferă o mai bună lizibilitate.

  4. Cum instalez pachetul purrr? Utilizare install.packages("purrr") a instala si library(purrr) pentru a-l încărca în sesiunea dvs. R.

  5. Care sunt câteva alternative la bucle în R? Operatii vectorizate, apply funcțiile familiei și dplyr funcțiile sunt alternative comune la buclele explicite în R.

Ne-ar plăcea să auzim de la tine!

Ți s-a părut util acest ghid? Căutăm mereu să îmbunătățim și să oferim cele mai bune resurse pentru programatorii R. Vă rugăm să vă împărtășiți gândurile, întrebările sau sugestiile în comentariile de mai jos. Și dacă ați găsit acest articol valoros, nu uitați să-l distribuiți rețelei dvs. pe rețelele sociale.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.