Noter om R
Noter om R
Noter om R
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