Suharto Anggono Suharto Anggono
2016-Nov-27 02:27 UTC
[Rd] ifelse() woes ... can we agree on a ifelse2() ?
Related to the length of 'ifelse' result, I want to say that "example of different return modes" in ?ifelse led me to perceive a wrong thing in the past. ## example of different return modes: yes <- 1:3 no <- pi^(0:3) typeof(ifelse(NA, yes, no)) # logical typeof(ifelse(TRUE, yes, no)) # integer typeof(ifelse(FALSE, yes, no)) # double As the result of each 'ifelse' call is not printed, I thought that the length of the result is 3. In fact, the length of the result is 1. I realize just now that the length of 'no' is different from 'yes'. The length of 'yes' is 3, the length of 'no' is 4. -------------------------------------------- Subject: Re: ifelse() woes ... can we agree on a ifelse2() ? To: R-devel at lists.R-project.org Date: Sunday, 27 November, 2016, 8:50 AM In all of the proposed 'ifelse'-like functions so far, including from me (that I labeled as 'ifelse2', following Martin Maechler) and from Martin Maechler, the length of the result equals the length of 'test', like in 'ifelse'. There is no recycling of 'test'.
Martin Maechler
2016-Nov-28 09:48 UTC
[Rd] ifelse() woes ... can we agree on a ifelse2() ?
> Related to the length of 'ifelse' result, I want to say that "example of different return modes" in ?ifelse led me to perceive a wrong thing in the past. > ## example of different return modes: > yes <- 1:3 > no <- pi^(0:3) > typeof(ifelse(NA, yes, no)) # logical > typeof(ifelse(TRUE, yes, no)) # integer > typeof(ifelse(FALSE, yes, no)) # double > > As the result of each 'ifelse' call is not printed, I thought that the length of the result is 3. In fact, the length of the result is 1."of course"... (;-) But this indeed proves that the example is too sophisticated and not helpful/clear enough. Is this better? ## example of different return modes (and 'test' alone determining length): yes <- 1:3 no <- pi^(1:4) utils::str( ifelse(NA, yes, no) ) # logical, length 1 utils::str( ifelse(TRUE, yes, no) ) # integer, length 1 utils::str( ifelse(FALSE, yes, no) ) # double, length 1> I realize just now that the length of 'no' is different from 'yes'. The length of 'yes' is 3, the length of 'no' is 4.
Apparently Analagous Threads
- ans[nas] <- NA in 'ifelse' (was: ifelse() woes ... can we agree on a ifelse2() ?)
- ifelse() woes ... can we agree on a ifelse2() ?
- ifelse() woes ... can we agree on a ifelse2() ?
- ifelse() woes ... can we agree on a ifelse2() ?
- ifelse() woes ... can we agree on a ifelse2() ?