# [R] RES: Learning, "if" and "else"

From: Paulo Brando <pmbrando_at_ipam.org.br>
Date: Wed 15 Jun 2005 - 02:26:59 EST

Thank you very much! All methods are very useful.

Paulo M. Brando
Instituto de Pesquisa Ambiental da Amazonia (IPAM) Santarem, PA, Brasil.
Av. Rui Barbosa, 136.
Fone: + 55 93 522 55 38
www.ipam.org.br
E-mail: pmbrando@ipam.org.br

-----Mensagem original-----
De: Adaikalavan Ramasamy [mailto:ramasamy@cancer.org.uk] Enviada em: Tuesday, June 14, 2005 3:17 AM Para: Paulo Brando
Cc: R-help@stat.math.ethz.ch
Assunto: Re: [R] Learning, "if" and "else"

You can also use switch() instead of ifelse(), which makes the code a bit easier to read. The downside to this is that switch does not take vectorised input and thus you need a loop. For example

# data

``` dbh  <- c(30,29,15,14,30,29)
form <- factor(c("tree", "tree", "liana", "liana", "palm", "palm"))
df   <- data.frame(dbh, form)

```

out <- numeric( nrow(df) )
for(i in 1:nrow(df)){

x <- as.numeric( df[i, 1] )
y <- as.character( df[i, 2] )

out[i] <- switch( y,

```              "tree"  = exp( -4.898 + 4.512*log(x) - 0.319*(log(x))^2 ),
"liana" = 10^(0.07 + 2.17 * log10(x)),
NA
)
```

}

Or slightly more efficient solution is

out <- apply( df, 1, function(z){
x <- as.numeric(z[1]); y <- as.character(z[2])

switch( y,

"tree" = exp( -4.898 + 4.512*log(x) - 0.319*(log(x))^2 ),
"liana" = 10^(0.07 + 2.17 * log10(x)),

```          NA
)
```

})

On Mon, 2005-06-13 at 15:32 -0700, Paulo Brando wrote:

```> Dear Rs,
>
> I have tried to use conditional expressions to calculate biomass for
> different life forms (trees, lianas, and palms).
>
> Here is an example:
>
> > lifeform
>
>     dbh  form
> 1   30  tree
> 2   29  tree
> 3   28  tree
> 4   27  tree
> 5   26  tree
> 6   25  tree
> 7   24  tree
> 8   23  tree
> 9   22  tree
> 10  21  tree
> 11  20  tree
> 12  15 liana
> 13  14 liana
> 14  13 liana
> 15  12 liana
> 16  11 liana
> 17  10 liana
> 18   9 liana
> 19   8 liana
> 20   7 liana
> 21   6 liana
> 22   5 liana
> 23  30  palm
> 24  29  palm
> 25  28  palm
> 26  27  palm
> 27  26  palm
> 28  25  palm
> 29  24  palm
> 30  23  palm
> 31  22  palm
> 32  21  palm
> 33  20  palm
>
> ### I want to include biomass
>
> lifeform\$biomass <-
>
> {
>       if(lifeform\$form=="tree")
>        exp(-4.898+4.512*log(dbh)-0.319*(log(dbh))^2)
>        else{
>         if (lifeform\$form=="liana")
>        10^(0.07 + 2.17 * log10 (dbh))
>        else ("NA")
> }
> Warning message:
> the condition has length > 1 and only the first element will be used
```
in:
```> if (lifeform\$form == "tree") exp(-4.898 + 4.512 * log(dbh) -
>
>
> ### But I always get the message warning message above.
>
>
>
> I looked for similar examples in R mail list archive, but they did not
> help a lot.
>
> I am quite new to 'R'. Any material that covers this theme?
>
> Thank you very much!
>
> Paulo
>
> PS. Sorry about the last e-mail. I did not change the message title.
> ________________________________________
> Paulo M. Brando
> Instituto de Pesquisa Ambiental da Amazonia (IPAM)
> Santarem, PA, Brasil.
> Av. Rui Barbosa, 136.
> Fone: + 55 93 522 55 38
> www.ipam.org.br
> E-mail: pmbrando@ipam.org.br
>
> ______________________________________________
> R-help@stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
```

http://www.R-project.org/posting-guide.html >

R-help@stat.math.ethz.ch mailing list