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 Lokální a globální proměnné

Logo Matematická biologie

Lokální a globální proměnné

V jazyce R není nezbytně nutné deklarovat proměnné uvnitř funkce. Při vyhodnocování funkce R používá pravidlo lexical scoping, které rozhodne, zda je objekt lokální nebo globální proměnnou.

> funkce1 <- function(){print(x)}
> x <- 3
> funkce1()    Objekt x není definován uvnitř funkce funkce1(), proto R hledá v uzavřeném1 prostředí objekt s názvem x a vytiskne jeho hodnotu. V případě, že by objekt x nebyl nalezen ani v globálním prostředí, zobrazilo by se chybové hlášení Error in print(x) : object 'x' not found a vyhodnocování funkce by tímto bylo u konce.
[1]    3
MATLAB by v případě, kdy objekt x není definován uvnitř funkce funkce1(), dával chybové hlášení, protože proměnná x je považována za lokální v prostředí, ve kterém byla definována (v tomto případě ve workspace).
> funkce2 <- function(){x <- 1; print(x)}
> x <- 3
> funkce2()
[1]    1
> x    Jestliže je x použito jako název objektu uvnitř funkce, hodnota x v globálním prostředí nebude změněna.
[1]    3

Chceme-li mít k dispozici i v globálním prostředí přiřazení provedená uvnitř funkce, musíme použít operátoru <<- nebo funkce assign s argumentem envir=.GlobalEnv.

> funkce3 <- function(){x <- 2; print(x)}
> x    přesvědčíme se, že objekt x není definován
Error: object 'x' not found
> funkce3()
[1]    2
> x    objekt x opravdu není v globálním prostředí definován, je definován pouze v prostředí funkce funkce3
Error: object 'x' not found
 
Rozdíl při použití operátoru pro globální přiřazení:
> funkce4 <- function(){assign("x", 2, envir=.GlobalEnv); print(x)}
> x
Error: object 'x' not found
> funkce4()
[1]    2
> x
[1]    2

 

 


1To, že jde o uzavřené prostředí, je důležité. V našem příkladu jsou dvě prostředí: globální a prostředí funkce funkce1(). Kdyby zde byla tři a více vnořených prostředí, hledání objektu by probíhalo postupně od daného prostředí, přes jednotlivá uzavřená prostředí až ke globálnímu.

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