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: [EMAIL PROTECTED]
-----Mensagem original----- De: Adaikalavan Ramasamy [mailto:[EMAIL PROTECTED] 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 ) }) Regards, Adai 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: [EMAIL PROTECTED] > > ______________________________________________ > R-help@stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html > ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html