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
`!` 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
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