[Rd] Time to revisit ifelse ?

Ben Bolker bbo|ker @end|ng |rom gm@||@com
Tue Jul 8 14:09:41 CEST 2025


   I think Duncan's point is that R-core are (reasonably) very, very, 
very conservative about adding things to base R. It would be useful to 
the community, and would indeed further the discussion, to make a tiny 
package containing just that function. (Even just copying it from some 
other package might require some work to disentangle it from 
dependencies: for example, a quick glance at dplyr::if_else shows that 
it uses functions from rlang, vctrs, ...)

   I'd be happy to accept a pull request in `gtools`, which is a 
zero-dependency (except base R) package for small utility functions ...

   cheers
    Ben Bolker


On 7/8/25 07:36, Antoine Fabri wrote:
> It's not about asking others to do it really, that was a harsh assumption.
> I'd be happy to propose a version if it helps, I'd be also very happy if it
> were just a copy of if_else or fifelse (both MIT FWIW).
> It's a low level building block and it's broken, IMO it's way better to
> have it available and documented in base R and incite everyone to use it,
> so not only we don't suffer from it in the code we write, but also in the
> code we use or inherit from.
> 
> Le mar. 8 juil. 2025 à 13:25, Duncan Murdoch <murdoch.duncan using gmail.com> a
> écrit :
> 
>> Rather than asking others to do this, why don't you create a tiny
>> package containing nothing other than an ifelse() replacement?  I
>> wouldn't want to depend on dplyr or data.table just to get their
>> versions, but depending on your tiny package wouldn't be an issue.
>>
>> Duncan Murdoch
>>
>> On 2025-07-08 6:12 a.m., Antoine Fabri wrote:
>>> Dear r-devel,
>>>
>>> `ifelse()` has a lot of issues, and for these reasons it has been redone
>> in
>>> `dplyr::if_else()` and `data.table::fifelse()`, which are both great. Yet
>>> it's an important base R function, it's really hard to program in base R
>>> without it and scores probably as high as it gets in the most_used *
>>> most_problematic metric.
>>>
>>> Obviously we can't change it without breaking a ton of code, but with all
>>> the experience we now have with it and the dplyr and data.table
>> alternative
>>> maybe it might not be absurd to have a good alternative, say `if.else` in
>>> base R, that we can document on the same page and recommend for future
>> use.
>>> It would require a common type in yes/no, not return logical() for all
>> zero
>>> length input, work with dates, datetimes and factors, handle a na
>> condition
>>> etc. The test suites of dplyr and data.table probably tell us everything
>>> about the edge cases we want to look at. Maybe the old ifelse could even
>>> warn when called from the top level, to incite us to work with the new
>> one.
>>>
>>> It feels wrong to me to be stuck with ifelse() forever just because it
>> has
>>> been like this for a long time. I'm sure some of you learnt your way
>> around
>>> it but I work with R every day and after 10+ years of R it still bites me
>>> all the time, I'm probably not alone, at least chatGPT called it a
>>> "footgun", and we don't want that :).
>>>
>>> Thanks,
>>>
>>> Antoine
>>>
>>>        [[alternative HTML version deleted]]
>>>
>>> ______________________________________________
>>> R-devel using r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>>
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

-- 
Dr. Benjamin Bolker
Professor, Mathematics & Statistics and Biology, McMaster University
Director, School of Computational Science and Engineering
* E-mail is sent at my convenience; I don't expect replies outside of 
working hours.



More information about the R-devel mailing list