Funkcje anonimowe
Część sekcji Logika i przepływ sterowania ścieżki R w Coddy. Lekcja 27 z 64.
W języku R funkcja jest wartością, taką jak liczba lub ciąg znaków. function(x) x * 2 tworzy funkcję bez nadawania jej nazwy, a wartość jej ostatniego wyrażenia jest tym, co zwraca:
double <- function(x) x * 2
print(double(21))
print((function(x) x + 1)(9))Wynik:
[1] 42
[1] 10R 4.1 dodał krótszą formę: \(x) oznacza to samo co function(x). Użyj nawiasów klamrowych, gdy ciało funkcji wymaga kilku wierszy:
square <- \(x) x^2
label <- function(x) {
size <- if (x > 10) "big" else "small"
paste(x, "is", size)
}
print(square(4))
print(label(12))Wynik:
[1] 16
[1] "12 is big"Ponieważ funkcje są wartościami, lista może przechowywać kilka z nich pod nazwami. ops[["inc"]] jest funkcją, więc ops[["inc"]](5) ją wywołuje:
ops <- list(inc = \(x) x + 1, neg = \(x) -x)
print(ops[["inc"]](5))
print(names(ops))Wynik:
[1] 6
[1] "inc" "neg"Funkcja może przyjmować kilka argumentów i przypisywać niektórym z nich wartości domyślne, dokładnie tak jak funkcja nazwana:
area <- \(w, h = w) w * h
print(area(3))
print(area(3, 5))Wynik:
[1] 9
[1] 15Wyzwanie
ŁatwyUzupełnij listę ops trzema funkcjami anonimowymi przyjmującymi jeden argument:
doublezwraca argument pomnożony przez 2squarezwraca argument pomnożony przez siebienegatezwraca argument ze zmienionym znakiem
Dostarczony kod odczytuje nazwę operacji i liczbę, wywołuje tę funkcję z ops i wypisuje wynik.
Spróbuj swoich sił
ops <- list(
# Wpisz tutaj swój kod
double = function(x) x
)
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
input <- suppressWarnings(readLines(file("stdin")))
f <- ops[[input[1]]]
cat(f(as.numeric(input[2])), sep = "\n")
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ sterowania
1Łańcuchy znaków w szczegółach
Podciągi za pomocą substr()Formatowanie za pomocą sprintf()Dzielenie i łączenieWyszukiwanie w łańcuchach znakówZastępowanie tekstuPowtórka – kreator nazwy użytkownika4Macierze
Tworzenie macierzyIndeksowanie macierzyPodsumowania wierszy i kolumnDziałania na macierzachPowtórka – plan miejsc10Zaawansowane sterowanie przepływem
Funkcja switch()Wektorowe ifelse()repeat i breakFunkcje rekurencyjnePodsumowanie — klasyfikator ocen2Wyszukiwanie wartości po kluczach
Wyszukiwanie nazwanych elementów wektoraSprawdzanie kluczyDodawanie i usuwanie kluczyIterowanie po nazwachPowtórzenie — giełda5Projekt — dziennik ocen
Dodawanie uczniówZapisywanie ocen3Zbiory i zliczanie
Unikalne wartościOperacje na zbiorachTesty przynależnościZliczanie za pomocą table()Podsumowanie — goście wydarzenia6Funkcje jako wartości
Funkcje anonimowePrzekazywanie funkcjiZwracanie funkcjiDomknięcia ze stanemPowtórka — reguły rabatowe9Ramki danych
Tworzenie ramek danychKolumny i wierszeFiltrowanie wierszyDodawanie i sortowaniePodsumowanie – raport sprzedaży12Projekt – śledzenie wydatków
Rejestrowanie wydatkówŁączne wydatkiPoćwicz samodzielnie: Kompilator R online