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 kzmiennej 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)