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




