[Rd] can we override "if" in R?

Michael Lawrence lawrence.michael at gene.com
Sat Mar 4 21:22:16 CET 2017


I'm curious as to precisely why someone would want to do this.

On Sat, Mar 4, 2017 at 11:49 AM, Da Zheng <zhengda1936 at gmail.com> wrote:

> I'm just curious. Why making "if" generic is even more dangerous?
>
> Best,
> Da
>
> On Sat, Mar 4, 2017 at 1:22 PM, Gábor Csárdi <csardi.gabor at gmail.com>
> wrote:
> > `!` is a generic, `if` is not. You can define an `if` that is generic,
> > but this might be even more dangerous....
> >
> > ❯ `if` <- function(a, b, c) UseMethod("if")
> > ❯ `if.default` <- function(a,b,c) base::`if`(a, b, c)
> > ❯ `if.foo` <- function(a, b, c) FALSE
> > ❯ a <- structure(42, class = "foo")
> >
> > ❯ if (a) TRUE else FALSE
> > [1] FALSE
> >
> > ❯ if (1) TRUE else FALSE
> > [1] TRUE
> >
> > Gabor
> >
> > On Sat, Mar 4, 2017 at 5:47 PM, Da Zheng <zhengda1936 at gmail.com> wrote:
> >> Thanks.
> >> Can I override it for a specific class?
> >> I can do that for operators such as "!". For example, "!.fm" works for
> >> objects of the class "fm".
> >> It seems I can't do the same for "if".
> >>
> >> Best,
> >> Da
> >>
> >> On Sat, Mar 4, 2017 at 12:41 PM, Gábor Csárdi <csardi.gabor at gmail.com>
> wrote:
> >>> You can. Perhaps needless to say, be careful with this.
> >>>
> >>> ❯ `if` <- function(...) FALSE
> >>> ❯ if (TRUE) TRUE else FALSE
> >>> [1] FALSE
> >>>
> >>> G.
> >>>
> >>> On Sat, Mar 4, 2017 at 5:36 PM, Da Zheng <zhengda1936 at gmail.com>
> wrote:
> >>>> Hello,
> >>>>
> >>>> I heard we can override almost everything in R. Is it possible to
> >>>> override "if" keyword in R to evaluate my own object instead of a
> >>>> logical value?
> >>>>
> >>>> Thanks,
> >>>> Da
> >>>>
> >>>> ______________________________________________
> >>>> R-devel at r-project.org mailing list
> >>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

	[[alternative HTML version deleted]]



More information about the R-devel mailing list