Funkcje R
Funkcja to blok kodu, który działa tylko wtedy, gdy jest wywoływana.
Do funkcji można przekazać dane, zwane parametrami.
W rezultacie funkcja może zwrócić dane.
Tworzenie funkcji
Aby utworzyć funkcję, użyj function()
słowa kluczowego:
Przykład
my_function <- function() { # create a function with the name my_function
print("Hello World!")
}
Wywołaj funkcję
Aby wywołać funkcję, użyj nazwy funkcji, po której następuje nawias, np. moja_funkcja() :
Przykład
my_function <- function() {
print("Hello World!")
}
my_function() # call the function named my_function
Argumenty
Informacje mogą być przekazywane do funkcji jako argumenty.
Argumenty są podane po nazwie funkcji, w nawiasach. Możesz dodać dowolną liczbę argumentów, po prostu oddziel je przecinkiem.
Poniższy przykład ma funkcję z jednym argumentem (fname). Gdy funkcja jest wywoływana, przekazujemy imię, które jest używane wewnątrz funkcji do wypisania pełnego imienia i nazwiska:
Przykład
my_function <- function(fname) {
paste(fname, "Griffin")
}
my_function("Peter")
my_function("Lois")
my_function("Stewie")
Parametry czy argumenty?
Terminów „parametr” i „argument” można używać w tym samym celu: informacji przekazywanych do funkcji.
Z perspektywy funkcji:
Parametr to zmienna wymieniona w nawiasach w definicji funkcji.
Argument to wartość, która jest wysyłana do funkcji podczas jej wywołania.
Liczba argumentów
Domyślnie funkcja musi być wywołana z odpowiednią liczbą argumentów. Oznacza to, że jeśli twoja funkcja oczekuje 2 argumentów, musisz wywołać funkcję z 2 argumentami, nie więcej i nie mniej:
Przykład
Ta funkcja oczekuje 2 argumentów i otrzymuje 2 argumenty:
my_function <- function(fname, lname) {
paste(fname, lname)
}
my_function("Peter", "Griffin")
Jeśli spróbujesz wywołać funkcję z 1 lub 3 argumentami, otrzymasz błąd:
Przykład
Ta funkcja oczekuje 2 argumentów i otrzymuje 1 argument:
my_function <- function(fname, lname) {
paste(fname, lname)
}
my_function("Peter")
Domyślna wartość parametru
Poniższy przykład pokazuje, jak używać domyślnej wartości parametru.
Jeśli wywołamy funkcję bez argumentu, użyje ona wartości domyślnej:
Przykład
my_function <- function(country = "Norway") {
paste("I am
from", country)
}
my_function("Sweden")
my_function("India")
my_function()
# will get the default value, which is Norway
my_function("USA")
Zwracane wartości
Aby funkcja zwróciła wynik, użyj return()
funkcji:
Przykład
my_function <- function(x) {
return (5 * x)
}
print(my_function(3))
print(my_function(5))
print(my_function(9))
Wynikiem powyższego kodu będzie:
[1] 15
[1] 25
[1] 45
Funkcje zagnieżdżone
Istnieją dwa sposoby tworzenia funkcji zagnieżdżonych:
- Wywołaj funkcję w ramach innej funkcji.
- Napisz funkcję w funkcji.
Przykład
Wywołaj funkcję w ramach innej funkcji:
Nested_function <- function(x, y) {
a <- x + y
return(a)
}
Nested_function(Nested_function(2,2), Nested_function(3,3))
Przykład wyjaśniony
Funkcja mówi x, aby dodać y.
Pierwsze wejście Nested_function(2,2) to "x" funkcji main.
Drugie wejście Nested_function(3,3) to „y” funkcji głównej.
Wynik wynosi zatem (2+2) + (3+3) = 10 .
Przykład
Napisz funkcję w funkcji:
Outer_func <- function(x) {
Inner_func <- function(y) {
a <- x + y
return(a)
}
return
(Inner_func)
}
output <- Outer_func(3) # To
call the Outer_func
output(5)
Przykład wyjaśniony
Nie można bezpośrednio wywołać funkcji, ponieważ funkcja Inner_func została zdefiniowana (zagnieżdżona) wewnątrz funkcji Outer_func.
Musimy najpierw wywołać Outer_func, aby wywołać Inner_func jako drugi krok.
Musimy utworzyć nową zmienną o nazwie output i nadać jej wartość, która wynosi tutaj 3.
Następnie wypisujemy wynik z żądaną wartością „y”, która w tym przypadku wynosi 5.
Wynik wynosi zatem 8 (3 + 5).
Rekurencja
R akceptuje również rekurencję funkcji, co oznacza, że zdefiniowana funkcja może wywołać samą siebie.
Rekurencja jest powszechną koncepcją matematyczną i programistyczną. Oznacza to, że funkcja wywołuje samą siebie. Ma to tę zaletę, że możesz zapętlić dane, aby osiągnąć wynik.
Deweloper powinien być bardzo ostrożny z rekurencją, ponieważ może być dość łatwo wślizgnąć się do napisania funkcji, która nigdy się nie kończy, lub takiej, która używa nadmiernej ilości pamięci lub mocy procesora. Jednak poprawnie napisana rekurencja może być bardzo wydajnym i matematycznie eleganckim podejściem do programowania.
W tym przykładzie tri_recursion()
jest to funkcja, którą zdefiniowaliśmy tak, aby nazywała się sama ("recurse"). Używamy
k
zmiennej jako danych, które zmniejszają się ( -1
) za każdym razem, gdy wykonujemy rekurencję. Rekurencja kończy się, gdy warunek nie jest większy niż 0 (tj. gdy wynosi 0).
Nowemu programiście może zająć trochę czasu, aby dowiedzieć się, jak dokładnie to działa, najlepszym sposobem jest przetestowanie i zmodyfikowanie go.
Przykład
tri_recursion <- function(k) {
if (k > 0) {
result <- k + tri_recursion(k - 1)
print(result)
} else {
result = 0
return(result)
}
}
tri_recursion(6)