[R] else if statement error
Gabor Grothendieck
ggrothendieck at gmail.com
Tue Oct 6 17:23:01 CEST 2009
2009/10/6 Uwe Ligges <ligges at statistik.tu-dortmund.de>:
>
>
> Gabor Grothendieck wrote:
>>
>> 2009/10/6 Uwe Ligges <ligges at statistik.tu-dortmund.de>:
>>>
>>> The first rule is easy: As long as you are using scalar valued (i.e.
>>> length
>>> 1 vectors in R) "cond", you should prefer
>>> if(cond) cons.expr else alt.expr
>>> rather than
>>> ifelse(cond, yes, no)
>>> because the latter one evaluates both "yes" and "no" while the former one
>>> evaluates exactly one of both expressions.
>>
>> I don't think that that is true. The false leg was not evaluated here:
>>
>>> ifelse(TRUE, { cat("a"); 1}, {cat("b"); 2})
>>
>> a[1] 1
>
>
> Ah, indeed that changed at some point and I forgot that the code checks for
> the length of cond nowadays. Thanks for pointing it out.
>
Modulo NAs, I think it checks whether cond is all TRUEs or all FALSEs
and in either of those cases it only evaluates one or the other. Of
course if cond is length 1 then it necessary is all TRUE or all FALSE.
If its a mixture of TRUE and FALSE then it evaluates both.
> ifelse(c(TRUE, TRUE), { cat("a"); 1}, {cat("b"); 2})
a[1] 1 1
> ifelse(c(FALSE, FALSE), { cat("a"); 1}, {cat("b"); 2})
b[1] 2 2
> ifelse(c(TRUE, FALSE), { cat("a"); 1}, {cat("b"); 2})
ab[1] 1 2
More information about the R-help
mailing list