Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyVýpočetní matematické systémy Výuka jazyka R Programování v R Funkce a dávkové soubory

Logo Matematická biologie

Funkce a dávkové soubory

Programy v jazyce R, které si uživatel může sám vytvořit, lze rozdělit do dvou skupin - dávkové soubory a funkce. V následujících odstavcích si uvedeme hlavní rozdíly mezi nimi a způsoby, jak lze tyto programy vytvořit.

Hlavním rozdílem funkcí a dávkových souborů je ten, že objekty definované uvnitř funkce nejsou k dispozici v pracovním prostoru. U dávkových souborů nezáleží na tom, z jakého adresáře jsou volány, objekty definované uvnitř dávky jsou v pracovním prostoru stále k dispozici. Dalším rozdílem je ten, že funkce pracují se vstupními proměnnými, dávkové soubory nikoliv.

Funkce

Každá funkce v R, ať vestavěná nebo definovaná uživatelem, je tvaru
nazev <- function(argumenty){telo}
kde nazev udává název funkce, argumenty je čárkami oddělená  posloupnost vstupních argumentů a telo obsahuje posloupnost příkazů, které musí být uzavřeny ve složených závorkách { } pouze v případě jediného příkazu mohou být složené závorky vynechány).

Funkce lze vytvářet přímo v příkazové řádce, při tvorbě složitějších zdrojových kódů je vhodnější místo příkazové řádky používat editory. Jazyk R má k dispozici zabudovaný vlastní editor, který najdeme v menu File New script. Možné je rovněž používat editory jako PSPad nebo WinEdt s číslovanými řádky, kontrolou syntaxe apod. Takto vytvořené funkce ukládáme do souboru s koncovkou .R.

V případě, že je funkce vytvořena přímo v příkazové řádce, spouští se zavoláním svého názvu nazev s argumenty uvedenými v kulatých závorkách. V případě, že je vytvořena v textovém editoru, je třeba nejdříve funkcí source() načíst soubor, ve kterém je uložena. Argumentem funkce source() je textový řetězec obsahující celý název souboru (i s koncovkou .R) nebo cestu k němu. Následně se spouští zavoláním názvu funkce nazev s argumenty uvedenými v kulatých závorkách.

Při volání funkce bez názvů argumentů musí být jednotlivé argumenty uvedeny přesně v tom pořadí, v jakém byly definovány. V opačném případě můžeme použít přiřazení nazev_argumentu=hodnota, popř. názvy argumentů můžeme zkracovat, jestliže zkratka nemůže znamenat žádný jiný argument. Hodnoty argumentů mohou mít definovány své implicitní hodnoty - ty lze příkazem nazev_argumentu=implicitni_hodnota nastavit v seznamu argumentů při definování funkce. Při volání funkce pak tyto argumenty mohou být vynechány a bude jim přidělena hodnota implicitni_hodnota

Výstupní hodnoty získáme pomocí funkce return(), pouze k výpisu hodnot se používá funkce print(). V případě jediného výstupního objektu je tento objekt uváděn do argumentu funkce return(), v případě více výstupních objektů musí být seskupeny do seznamu.

Jazyk R rovněž umožňuje definování nových binárních operátorů (např. %in%). K odlišení od funkcí musí být jejich název ve tvaru "%nazev%".

> kvadr <- function(a, b, c){
+ obsah <- 2*(a*b + b*c + c*a)
+ objem <- a*b*c
+ return(list(obsah=obsah, objem=objem))}
> vystup <- kvadr(1, 2, 3)
> vystup
$obsah
[1]    22

Dávkové soubory

Jedná se o posloupnost příkazů, která může využívat již definovaných objektů z pracovního prostoru. Zpravidla se vytváří v libovolném textovém editoru, název souboru musí mít příponu .R (např. davka.R). Dávkové soubory se spouští funkcí source s názvem dávkového souboru (nebo cestou k němu) uvedeným jako textový řetězec (např. source("davka.R")). 

> a <- 1; b <- 2; c <- 3
> source("kvadr.R")   spuštění dávky kvadr.R
> obsah
[1]    2
> objem
[1]    6

Násilné ukončení běžící dávky nebo funkce se provádí příkazem Q.

V průběhu funkce nebo dávky se občas může stát, že se potřebujeme dostat zpět do pracovního prostoru, např. vypracování zadaných úkolů (viz cvičení) a následně dále pokračovat v běhu funkce či dávky. To lze příkazem browser(), k odlišení funkce či dávky a prostředí pracovního prostoru se prompt změní na Browse[1]>. Od této chvíle se nacházíme v pracovním prostoru, kde můžeme zadávat libovolné příkazy. Zpět se dostaneme příkazem c nebo klávesou ENTER.

MATLAB místo příkazu browser() používá keyboard, objevuje se prompt K>> a k návratu zpět do dávkového souboru používá příkaz return.

 

 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity