18.07.2013 Views

Noter om R

Noter om R

Noter om R

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

indekseringen fib[n] (jvf. afsnit 14.2). Dette sidste udtryk i funktionens krop specificerer funktionens<br />

returværdi, dvs. den værdi man “får ud” når man anvender funktionen — se afsnit 18 for en nærmere<br />

forklaring.<br />

Eksempler på brug:<br />

> fibonacci(6)<br />

[1] 8<br />

> fibonacci(1:10)<br />

[1] 1 1 2 3 5 8 13 21 34 55<br />

Ovenstående beregner først det sjette Fibonacci-tal og derefter de 10 første Fibonacci-tal.<br />

19.3 Betingede udtryk: ifelse<br />

Et if . . . else udtryk s<strong>om</strong> beskrevet i det foregående er beregnet til at operere på kun en enkelt sandhedsværdi<br />

i betingelsen. Hvis betingelsen giver en vektor med mere end én sandhedsværdi vil kun det<br />

første element blive brugt og R vil ydermere give en advarsel. Dette betyder at funktionen fak fra afsnit<br />

19.2.2 i modsætning til R’s indbyggede funktioner ikke virker på en vektor med mere end ét tal: Dels<br />

vil der blive genereret en masse advarsler fordi betingelsen (x==1) giver et vektorresultat når x er en<br />

vektor, dels vil det alene være det første tal i argumentvektoren der vil k<strong>om</strong>me til at styre antallet af multiplikationer.<br />

Det betyder at fak(1:10) simpelthen giver tallet 1, og fak(c(3,4)) giver vektoren<br />

c(6,12), hvilket kun er korrekt i første element.<br />

For at lave en implementation af fakultetsfunktionen der virker på vektorer af tal lige s<strong>om</strong> R’s interne<br />

funktioner kan man i stedet benytte funktionen ifelse. Det er en funktion der tager tre (vektor)<br />

argumenter:<br />

ifelse( v1 , v2 , v3 )<br />

Det første argument v1 skal være vektor af logiske værdier og det andet og tredie to vektorer af samme<br />

længde s<strong>om</strong> v1 (<strong>om</strong>end den sædvanlige genbrugsregel gælder hvis den ene er for kort). Resultatet er en<br />

vektor af samme længde s<strong>om</strong> v1 sammensat af elementer fra v2 og v3 således at hvor v1 er TRUE tages<br />

elementer fra v2 og hvor v1 er FALSE tages elementer fra v3. Eksempel:<br />

> x x<br />

[1] 1 2 3 4 5 6 7 8 9 10<br />

> 10-x<br />

[1] 9 8 7 6 5 4 3 2 1 0<br />

> ifelse(x>5, x, 10-x)<br />

[1] 9 8 7 6 5 6 7 8 9 10<br />

Hvis betingelsen v1 er TRUE i alle elementer evalueres v3 slet ikke. Tilsvarende vil v2 ikke blive evalueret<br />

hvis v1 er FALSE i alle elementer. Kun hvis v1 har en blanding af sande og falske elementer evalueres<br />

både v2 og v3.<br />

Vi kan nu implementere fak på en bedre måde:<br />

> fak

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!