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

Da Zheng zhengda1936 at gmail.com
Sat Mar 4 20:49:26 CET 2017


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



More information about the R-devel mailing list