Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyAnalýza dat v R Rozšířené základy R Rozšířené ovládání R Příkazy v R

Logo Matematická biologie

Příkazy v R

R pracuje s příkazy - základní příkazy jsou výrazy (2 +3) nebo přiřazení (a=2+3).

Příkazy se oddělují pomocí středníku, nebo novým řádkem. Pokud příkaz nekončí na konci řádku, začátek každého následujícího řádku bude mít znak + až do konce syntaxe příkazu.
Příkazové řádky jsou limitovány na cca 4095 bytů.

Komentáře se označují symbolem # (vše v řádku za tímto symbolem není vyhodnoceno jako příkaz, ale jako komentář).

Příkazy můžeme spustit i načítáním externího souboru, který příkazy obsahuje:

> source("skript.R")

 

Textové výsledky můžeme namísto zobrazení do konzoly ukládat do externího souboru pomocí příkazu

> sink("vysledky.txt")

ukládání ukončíme pomocí

> sink()

 

Přiřazení

Pokud je zadaným příkazem výraz, vyhodnotí se, zobrazí, a jeho hodnota se vymaže
> 2 + 3
[1] 5

[1] na začátku řádku, který zobrazuje výsledek

Přiřazení také vyhodnotí výraz, ale jeho hodnota se přiřadí proměnné. Výsledek se normálně nezobrazí. Přiřazení se děje operátory "<-", "=", nebo pomocí přiřazovací funkce assign()
> x <- 5

> x = 5

> assign ("x", 5)

 

Jaký je tedy mezi nimi rozdíl?

"<-" se doporučuje používat ve většině případů definice objektů nebo funkcí, s výjimkou zadávání parametrů funkce. Tento znak přiřadí hodnotu proměnné.

"=" je nutné používat hlavně při zadávání parametrů funkce

 

Demonstrujme si na příkladu použití těchto znaků

Pro vytvoření seznamu použijeme funkci list(). Při zadávání hodnot jednotlivých prvků seznamu používáme operátor "=", při přiřazení seznamu do proměnné "film" pak použijeme "<-".

> film <- list(jmeno="bond, james bond", vek=40, zenaty=F, herci=c("Sean Connery", "George Lazenby", "Roger Moore", "Timothy Dalton", "Pierce Brosnan", "Daniel Craig"))

> film
$jmeno
[1] "bond, james bond"

$vek
[1] 40

$zenaty
[1] FALSE

$herci
[1] "Sean Connery"   "George Lazenby" "Roger Moore"    "Timothy Dalton" "Pierce Brosnan" "Daniel Craig" 

Další správná, ale nedoporučovaná (ve smyslu konvence) varianta tohoto kódu je použít přiřazení seznamu do proměnné "film" znak "=" místo "<-":

> film = list(jmeno="bond, james bond", vek=40, zenaty=F, herci=c("Sean Connery", "George Lazenby", "Roger Moore", "Timothy Dalton", "Pierce Brosnan", "Daniel Craig"))

> film
$jmeno
[1] "bond, james bond"

$vek
[1] 40

$zenaty
[1] FALSE

$herci
[1] "Sean Connery"   "George Lazenby" "Roger Moore"    "Timothy Dalton" "Pierce Brosnan" "Daniel Craig"

 

Variace, při které se použije operátor "<-" místo "=" při zadávání hodnot prvkům seznamu, již správná není:

> film <- list(jmeno<-"bond, james bond", vek=40, zenaty=F, herci=c("Sean Connery", "George Lazenby", "Roger Moore", "Timothy Dalton", "Pierce Brosnan", "Daniel Craig"))

> film
[[1]]
[1] "bond, james bond"

$vek
[1] 40

$zenaty
[1] FALSE

$herci
[1] "Sean Connery"   "George Lazenby" "Roger Moore"    "Timothy Dalton" "Pierce Brosnan" "Daniel Craig"

Co se stalo? První prvek seznamu sice hodnotu má, ale již nemá jméno, pouze pořadí [[1]]. Naopak, v pracovním prostoru nám přibyla proměnná "jmeno".

> jmeno
[1] "bond, james bond"

Jak je to možné? Operátor "<-" totiž znamená vytvoření objektu v nejvyšším levelu (top level) prostředí, kde pracujeme, ne zadání hodnoty proměnné. Protože R vyhodnocuje příkazy systémem "zevnitř", nejdříve vyhodnotilo každou z proměnných funkce.

Protože se uvnitř zadání vyskytl operátor "<-", provedl se v nejvyšším levelu - v tomto případě přímo v základním prostředí - příkaz.

> jmeno<-"bond, james bond"

Jako první objekt funkce proto dosadil hodnotu objektu "jmeno".

U dalších proměnných funkce tento problém nenastal, protože R vyhodnotilo zadání např: vek=40 jako "druhý prvek seznamu má název věk a hodnotu 40".

 

assign() je funkce ekvivalentní operátoru "<-". Využívá se v případě, že chceme definovat názvy proměnných s pomocí proměnné a funkce paste():

> for (i in c (1:5))
     {
         assign (paste ("m", i, "na2", sep = ""), i ^ 2)
     }

> ls(pattern="na2")
 [1] "m1na2"       "m2na2"       "m3na2"       "m4na2"       "m5na2"

> m2na2
[1] 4

get() zobrazí hodnotu objektu vzniklého přiřazením hodnoty pomocí assign()
 

Zajímavostí je, že R umí vyhodnotit i operátor "->", avšak název proměnné musí být vpravo a její hodnota vlevo:

>  5 -> x

!!! Na co si dávat pozor !!!

Při použití logického operátoru < může nastat problém, je-li jeden z objektů negativní číslo:

V tomto případě musíme použít mezeru mezi operátorem a znaménkem mínus, jinak R buď zahlásí chybu

> 2<-5
Error in 2 <- 5 : invalid (do_set) left-hand side to assignment

... nebo se příkaz vyhodnotí jako přiřazení:

> a=2
> a<-5
> a

[1] 5

Umístění mezery mezi operátorem a znaménkem mínus problém vyřeší:

> 2< -5
[1] FALSE

Další mezery neuškodí, ale jsou zbytečné:

> 2< - 5
[1] FALSE
> 2 < - 5
[1] FALSE

Použití závorek je dalším způsobem jak problému předejít:

> 2<(-5)
[1] FALSE

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