>>>>> Mikko Marttila via R-devel 
>>>>>     on Wed, 09 Jul 2025 09:02:38 +0000 writes:

    > Thanks Antoine for starting this discussion. It would indeed be great to 
see
    > an improved `ifelse()` in base R.

    > I also agree with Duncan's suggestion that the way to proceed would be to
    > create a package where the improved version could be drafted, discussed 
and
    > refined so that R Core would have a concrete proposal to consider in the 
end.

    > Some initial thoughts on what should be considered:

    > Performance has been mentioned a few times. While it would of course be 
nice
    > to see improvements there I think the main goal is in the API. The goal 
for
    > performance should rather be that it doesn't deteriorate unacceptably.

    > While data.table's and dplyr's ifelse variants may serve as a good 
starting
    > point for identifiying the improvements needed, I don't think either is a 
good
    > candidate for simply copying as the base R candidate. A function in base R
    > should adhere to the conventions in base R; neither of the packages does 
that.
    > They instead have their own stricter requirements. For example:

    > * Incompatible lengths: Base R recycles with a warning, both packages 
error out.
    > * Different classes: Base R coerces loosely, dplyr uses stricter coercion 
rules
    > based on vctrs, and data.table doesn't allow any coercion.

    > Another point to consider is the handling of attributes for the result.
    > data.table copies from the first non-NA input from left to right, while 
dplyr
    > delegates to vctrs again for merging the attributes gracefully. This 
matters
    > for example for factors, where data.table special-cases them to require 
the
    > same levels, wherease dplyr merges them. For a base R solution, it would 
make
    > sense to delegate the attribute handling to `c()` somehow, as that's 
conceptually
    > what should be happening; we're combining values from the `yes` and `no` 
objects.

    > I'm sure there are many other points to consider, but as I said this is 
what
    > comes to mind at first. Best of luck with the effort.

    > Kind regards,

    > Mikko

    [..........]

    >> -----Original Message-----
    >> From: R-devel r-devel-boun...@r-project.org On Behalf Of Duncan Murdoch
    >> Sent: Tuesday, July 8, 2025 3:06 PM
    >> To: Josiah Parry josiah.pa...@gmail.com; Avraham Adler 
avraham.ad...@gmail.com
    >> Cc: r-devel@r-project.org
    >> Subject: Re: [Rd] Time to revisit ifelse ?
    >> 
    >> Since you and Antoine are volunteering to do the work, why not start in
    >> the way I suggested? Write up a comparison of the known ifelse
    >> implementations, and either pick the best one, or choose the best parts
    >> of each. Put the result in a package containing nothing else, and
    >> invite comment from the wider community.
    >> 
    >> My only comment in advance is that the package should have no
    >> dependencies other than base packages, for two reasons:
    >> 
    >> 1. The hope is to have it adopted in base R, and for that it can't have
    >> any other dependencies.
    >> 
    >> 2. If it's never adopted by R Core, I might still want to use it, but I
    >> don't want to add extra dependencies for just one little function.
    >> 
    >> Duncan Murdoch

    [................]

Thank you, Mikko, Antoine, Duncan, etc
I'm trying to summarize the things I agree / or find important.
Note that we had ifelse() discussions in the past (on this
mailing list and/or possibly on R-help); I did get involved and
spent many hours on coding myself, with no convincing result
IIRC,  but I do vaguely remember I got very convinced we should
*not* plan to replace ifelse() but add a second version, say
if.else() (as  "if_else" is already taken by dplyr).

1) Antoine Fabri proposed that base R should get *another*
  version of ifelse() *in addition* to ifelse().   The issue
  hence is *NOT* replacing ifelse() by something incompatible.

2) Duncan Murdoch's points are *very* much to the point, most
   importantly:
   
    Propose (with discussion / RFC / ...) a function in a (single
    function) package which only depends on R's base package. 

 I'd add to that that you should probably use the GPL-2 licence
 or are willing to donate it with that licence to R and do say so;
 e.g., we cannot add MIT-licenced things to R.

3) Ben Bolker's offer to "host" such a function in his 'gtools'
   package (w/ 0-dependency) would also be acceptable to me,
   even though it is against DM's "2. If it's never adopted by R Core, .."

Best,
Martin

--
Martin Maechler
ETH Zurich  and  R Core team

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to