else
Strukturované příkazy
control {base} | Dokumentace R v češtině |
Popis
Jsou zde uvedeny základní konstrukce pro strukturované příkazy jazyka R. Fungují podobně jako strukturované příkazy jakéhokoliv jazyka vycházejícího z původního jazyka Algol. Všechny příkazy se řadí mezi tzv. rezervovaná slova.
Použití
if(cond) expr
if(cond) cons.expr else alt.expr
for(var in seq) expr
while(cond) expr
repeat expr
break
next
Argumenty
cond |
Vektor typu logical o délce jedna, který neobsahuje |
var |
Syntaktický název proměnné. |
seq |
výraz, který je vyhodnocován jako vektor (může být i seznam či tzv. expression, což je seznam volání, symbolů apod.), pairlist nebo |
expr, cons.expr, alt.expr |
výraz ve formálním smyslu. Jedná se buď o jednoduchý výraz nebo o tzv. složeený výraz, obvykle ve tvaru |
Detaily
Příkaz break
přeruší smyčku for
, while
i repeat
; kontrola je v takovém případě převedena na první příkaz nacházející se mimo nejvnitřnější smyčku. next
zastaví zpracovávání aktuální iterace a pokročí v indexu smyčky. break
i next
se týká pouze nejvnitřnější části vnořené smyčky.
Častou chybou je opomenutí vložení závorek ({ .. }
) okolo příkazu, např. po if(..)
nebo for(....)
. Abychom se vyhli chybě v syntaxi při vkládání if ... else
konstrukce na klávesnici nebo přes source
, je zvláště důležité nedávat nový řádek mezi }
a else
. Z toho důvodu je jedním (poměrně extrémním) z rysů defenzivního programování opakované používání závorek, např. u if
klauzulí.
seq
ve smyčce for
je vyhodnocen na začátku smyčky; může se postupně měnit bez ovlivnění chodu smyčky. Pokud má seq
délku nula, je tělo smyčky přeskočeno. V ostatních případech nabývá proměnná var
postupně hodnoty každého prvku seq
. Lze také zadat proměnné var
hodnotu v rámci těla smyčky, ovšem následující iterace nebude tímto ovlivněna. Když je smyčka ukončena, var
zůstane jako proměnná se svoji poslední nabytou hodnotou.
Hodnota
if
navrátí hodnotu vyhodnoceného výrazu nebo neviditelně NULL
, pokud nic neobsahoval (což se může stát, pokud není zadáno žádné else
).
for
, while
a repeat
navrátí neviditelně NULL
. for
nastaví var
na poslední použitý prvek z seq
, nebo na NULL
, pokud bylo seq
nulové délky.
break
a next
nenavrátí žádnou hodnotu. Pouze přenášejí kontrolu v rámci smyčky.
Reference
Becker, R. A., Chambers, J. M. a Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
Příklady
for(i in 1:5) print(1:i)
for(n in c(2,5,10,20,50)) {
x <- stats::rnorm(n)
cat(n, ": ", sum(x^2), "n", sep = "")
}
f <- factor(sample(letters[1:5], 10, replace = TRUE))
for(i in unique(f)) print(i)