Pętla for jest bardzo cenna, gdy musimy iterować po liście elementów lub zakresie liczb. Pętli można używać do iteracji po liście, ramce danych, wektorze, macierzy lub dowolnym innym obiekcie. Szelki i nawias kwadratowy są obowiązkowe.
W tym samouczku nauczymy się,
- Składnia pętli i przykłady
- Dla pętli nad listą
- Dla pętli na macierzy
Składnia pętli i przykłady
For (i in vector) {Exp}
Tutaj,
R zapętli wszystkie zmienne w wektorze i wykona obliczenia zapisane w exp.
Zobaczmy kilka przykładów.
Przykład 1 : Iterujemy po wszystkich elementach wektora i drukujemy aktualną wartość.
# Create fruit vectorfruit <- c('Apple', 'Orange', 'Passion fruit', 'Banana')# Create the for statementfor ( i in fruit){print(i)}
Wynik:
## [1] "Apple"## [1] "Orange"## [1] "Passion fruit"## [1] "Banana"
Przykład 2 : tworzy funkcję nieliniową, używając wielomianu x między 1 a 4 i przechowujemy go na liście
# Create an empty listlist <- c()# Create a for statement to populate the listfor (i in seq(1, 4, by=1)) {list[[i]] <- i*i}print(list)
Wynik:
## [1] 1 4 9 16
Pętla for jest bardzo przydatna w przypadku zadań uczenia maszynowego. Po wytrenowaniu modelu musimy uregulować model, aby uniknąć nadmiernego dopasowania. Regularyzacja jest bardzo żmudnym zadaniem, ponieważ musimy znaleźć wartość, która minimalizuje funkcję straty. Aby pomóc nam wykryć te wartości, możemy użyć pętli for do iteracji w zakresie wartości i zdefiniowania najlepszego kandydata.
Dla pętli nad listą
Zapętlenie po liście jest tak samo łatwe i wygodne, jak zapętlenie po wektorze. Zobaczmy przykład
# Create a list with three vectorsfruit <- list(Basket = c('Apple', 'Orange', 'Passion fruit', 'Banana'),Money = c(10, 12, 15), purchase = FALSE)for (p in fruit){print(p)}
Wynik:
## [1] "Apple" "Orange" "Passion fruit" "Banana"## [1] 10 12 15## [1] FALSE
Dla pętli na macierzy
Macierz ma 2 wymiary, wiersze i kolumny. Aby iterować po macierzy, musimy zdefiniować dwie pętle for, a mianowicie jedną dla wierszy, a drugą dla kolumny.
# Create a matrixmat <- matrix(data = seq(10, 20, by=1), nrow = 6, ncol =2)# Create the loop with r and c to iterate over the matrixfor (r in 1:nrow(mat))for (c in 1:ncol(mat))print(paste("Row", r, "and column",c, "have values of", mat[r,c]))
Wynik:
## [1] "Row 1 and column 1 have values of 10"## [1] "Row 1 and column 2 have values of 16"## [1] "Row 2 and column 1 have values of 11"## [1] "Row 2 and column 2 have values of 17"## [1] "Row 3 and column 1 have values of 12"## [1] "Row 3 and column 2 have values of 18"## [1] "Row 4 and column 1 have values of 13"## [1] "Row 4 and column 2 have values of 19"## [1] "Row 5 and column 1 have values of 14"## [1] "Row 5 and column 2 have values of 20"## [1] "Row 6 and column 1 have values of 15"## [1] "Row 6 and column 2 have values of 10"