Podstawy R – Funkcje
Wiemy już z postów rozpoczynających przygodę z R, jak korzystać z funkcji zapisanych w pakietach opracowanych przez innych użytkowników. Teraz nauczymy się jak tworzyć własne funkcje w R. Funkcje przydają się do zamknięcia w nich przetworzeń, które się często powtarzają w naszym kodzie lub dla jego lepszej czytelności. Podstawowa składnia funkcji w R wygląda tak:
1 2 3 4 5 6 7 8 |
nazwa_funkcja = function(argument 1, argument 2, …) { ciało funkcji return(wartość lub obiekt zwracany) } |
Napiszmy funkcję, która będzie mnożyła dowolny wektor przez podaną liczbę, a następnie zsumuje elementy wektora :
1 2 3 4 5 6 7 8 9 |
funkcja = function(wektor, liczba) { rezultat = wektor * liczba rezultat = sum(rezultat) return(rezultat) } |
Wykonajmy naszą funkcję dla dwóch zdefiniowanych zmiennych:
1 2 3 4 5 6 7 |
v = c(1:5) n = 4 wynik <- funkcja(v,n) print(wynik) |
W wyniku otrzymujemy:
1 2 |
print(wynik) [1] 60 |
Do wykonania funkcji potrzebne jest zdefiniowanie obu argumentów. Co będzie jak ich nie dodamy:
1 2 |
wynik = funcja(v) Error in funkcja(v) : argument "liczba" is missing, with no default |
Wyświetli się błąd, że argument drugi zaginął i nie mamy zdefiniowanej jego wartości domyślnej. Zdefiniujmy zatem domyślną wartość argumentu liczba jako NULL i dopiszmy do naszej funkcji kod, który gdy ten argument będzie miał wartość domyślną zwróci tylko sumę elementów wektora:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
funkcja = function(wektor, liczba = NULL) { if(is.null(liczba) { rezultat = sum(wektor) } else { rezultat = wektor * liczba rezultat = sum(rezultat) } return(rezultat) } |
Wykonajmy naszą nową funkcję podając tylko pierwszy argument:
1 2 3 |
v = c(1:5) wynik = funckja(v) print(wynik) |
W wyniku otrzymujemy:
1 2 |
print(wynik) [1] 15 |
Funkcje są bardzo przydatne, gdy mamy do napisania długi skrypt. Pozwalają na podzielenie głównej części kodu na mniejsze kawałeczki, które kolejnemu użytkownikowi skryptu lub nam będzie łatwiej modyfikować. W kolejnej części kursu pokażemy jak korzystać z możliwości R w analizie danych.