R funkce


Funkce je blok kódu, který se spustí pouze tehdy, když je zavolán.

Do funkce můžete předávat data, známá jako parametry.

Funkce může jako výsledek vrátit data.


Vytvoření funkce

Chcete-li vytvořit funkci, použijte function()klíčové slovo:

Příklad

my_function <- function() { # create a function with the name my_function
  print("Hello World!")
}

Volání funkce

Chcete-li zavolat funkci, použijte název funkce následovaný závorkou, například my_function() :

Příklad

my_function <- function() {
  print("Hello World!")
}

my_function() # call the function named my_function

Argumenty

Informace lze předávat funkcím jako argumenty.

Argumenty jsou uvedeny za názvem funkce v závorkách. Můžete přidat tolik argumentů, kolik chcete, stačí je oddělit čárkou.

Následující příklad má funkci s jedním argumentem (fname). Když je funkce volána, předáme křestní jméno, které se používá uvnitř funkce k vytištění celého jména:

Příklad

my_function <- function(fname) {
  paste(fname, "Griffin")
}

my_function("Peter")
my_function("Lois")
my_function("Stewie")

Parametry nebo argumenty?

Termíny „parametr“ a „argument“ lze použít pro stejnou věc: informace, které jsou předány funkci.

Z pohledu funkce:

Parametr je proměnná uvedená v závorkách v definici funkce.

Argument je hodnota, která je odeslána funkci při jejím volání.



Počet argumentů

Ve výchozím nastavení musí být funkce volána se správným počtem argumentů. To znamená, že pokud vaše funkce očekává 2 argumenty, musíte funkci volat se 2 argumenty, ne více a ne méně:

Příklad

Tato funkce očekává 2 argumenty a dostane 2 argumenty:

my_function <- function(fname, lname) {
  paste(fname, lname)
}

my_function("Peter", "Griffin")

Pokud se pokusíte volat funkci s 1 nebo 3 argumenty, dostanete chybu:

Příklad

Tato funkce očekává 2 argumenty a dostane 1 argument:

my_function <- function(fname, lname) {
  paste(fname, lname)
}

my_function("Peter")

Výchozí hodnota parametru

Následující příklad ukazuje, jak použít výchozí hodnotu parametru.

Pokud funkci zavoláme bez argumentu, použije výchozí hodnotu:

Příklad

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

Návratové hodnoty

Chcete-li, aby funkce vrátila výsledek, použijte return()funkci:

Příklad

my_function <- function(x) {
  return (5 * x)
}

print(my_function(3))
print(my_function(5))
print(my_function(9))

Výstupem výše uvedeného kódu bude:

[1] 15
[1] 25
[1] 45

Vnořené funkce

Existují dva způsoby, jak vytvořit vnořenou funkci:

  • Volání funkce v rámci jiné funkce.
  • Napište funkci v rámci funkce.

Příklad

Volání funkce v rámci jiné funkce:

Nested_function <- function(x, y) {
  a <- x + y
  return(a)
}

Nested_function(Nested_function(2,2), Nested_function(3,3))

Příklad vysvětlen

Funkce říká x, aby přidal y.

První vstup Nested_function(2,2) je "x" hlavní funkce.

Druhý vstup Nested_function(3,3) je "y" hlavní funkce.

Výstup je tedy (2+2) + (3+3) = 10 .

Příklad

Napište funkci do funkce:

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)

Příklad vysvětlen

Funkci nemůžete volat přímo, protože Inner_func byl definován (vnořen) uvnitř Outer_func.

Nejprve musíme zavolat Outer_func, abychom jako druhý krok zavolali Inner_func.

Musíme vytvořit novou proměnnou nazvanou výstup a dát jí hodnotu, která je zde 3.

Poté vytiskneme výstup s požadovanou hodnotou "y", což je v tomto případě 5.

Výstup je tedy 8 (3 + 5).


Rekurze

R také přijímá rekurzi funkce, což znamená, že definovaná funkce může volat sama sebe.

Rekurze je běžný matematický a programovací koncept. To znamená, že funkce volá sama sebe. To má tu výhodu, že můžete procházet daty a dosáhnout výsledku.

Vývojář by měl být s rekurzí velmi opatrný, protože může být docela snadné sklouznout k psaní funkce, která nikdy nekončí, nebo funkce, která využívá nadměrné množství paměti nebo výkonu procesoru. Pokud je však rekurze napsána správně, může být velmi účinným a matematicky elegantním přístupem k programování.

V tomto příkladu tri_recursion()je funkce, kterou jsme definovali, aby se volala sama ("rekurze"). Jako data používáme kproměnnou, která se snižuje ( -1) pokaždé, když opakujeme. Rekurze končí, když podmínka není větší než 0 (tj. když je 0).

Novému vývojáři může chvíli trvat, než přijde na to, jak přesně to funguje, nejlepší způsob, jak to zjistit, je otestovat a upravit.

Příklad

tri_recursion <- function(k) {
  if (k > 0) {
    result <- k + tri_recursion(k - 1)
    print(result)
  } else {
    result = 0
    return(result)
  }
}
tri_recursion(6)