[R] how to use if statement in function correctly
Petr Pikal
petr.pikal at precheza.cz
Thu Sep 19 11:46:28 CEST 2002
Dear all
I try to persuade if statement in my function to work as I want (but I am not very
successful:(
My question is why my function with if statement is evaluated correctly in case of
atomic variables and incorrectly in case of vector variables.
Here is an example:
#function with if statement
fff <- function(otac,sklon)
{
test <- (otac * 3.69683+286.6*(1/sklon)-0.03100345*otac*sklon)
if(test<65)
{otac/sklon * 141.76}
else
{otac * 3.69683+286.6*(1/sklon)-0.03100345*otac*sklon}
}
> fff(20,70)
[1] 40.50286
# correct
> fff(50,70)
[1] 80.42371
#correct
> fff(seq(20,50,5),70)
[1] 40.50286 50.62857 60.75429 70.88000 81.00571 91.13143 101.25714
#wrong
-----------------------------------------------------------------------------------------------
It does not work because if statement is obviously evaluated as TRUE in all
instances and computes wrongly some items in vector according to the first part
of the fff function
# see direct computation
> seq(20,50,5)/70*141.76
[1] 40.50286 50.62857 60.75429 70.88000 81.00571 91.13143 101.25714
> seq(20,50,5) * 3.69683+286.6*(1/70)-0.03100345*seq(20,50,5)*70
[1] 34.62606 42.25900 49.89194 57.52488 65.15783 72.79077 80.42371
On the other hand ifelse works
******************************
fff <- function(otac,sklon)
{
test <- (otac * 3.69683+286.6*(1/sklon)-0.03100345*otac*sklon)
ifelse(test<65, (otac/sklon * 141.76), (otac * 3.69683+286.6*(1/sklon)-
0.03100345*otac*sklon))
}
> fff(seq(20,50,5),70)
[1] 40.50286 50.62857 60.75429 70.88000 65.15783 72.79077 80.42371
#correct
Can anybody help?
Thank you in advance
Petr Pikal
petr.pikal at precheza.cz
p.pik at volny.cz
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
More information about the R-help
mailing list