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@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to