[R] how to overwrite a Unary operator ?

David Winsemius dwinsemius at comcast.net
Fri Oct 17 19:40:50 CEST 2014


On Oct 17, 2014, at 1:06 AM, PO SU wrote:

> 
> Tks for your alternative way's details. but like you mentioned in graphics package, i still wonder how to overload an operator which can pass one param like +2 .
> There seems exists some examples for my needing. But i try to find them but without any results.
> can you show me some examples from it? 
> 

I think this might be a case of "if you don't know enough to do it, then you don't know why you shouldn't do it." (Or vice versa?) I did search for a relevant fortune to support my impression, but the various entries for fortune("parse") and fortune("eval") didn't seem to hit the mark.

library(ggplot2)
help(pack="ggplot2")  # scroll to bottom of page
ggplot2:::`+.gg`   # this shows the S3 method of adding an operator based on the S3 method dispatch.

I was able to emulate that example to create a C-like, unary `+` operator for a new class, but I'm not willing to put it in print for fear that my karmic account might be depleted.

-- 
David.

> --
> 
> PO SU
> mail: desolator88 at 163.com 
> Majored in Statistics from SJTU
> 
> 
> 
> At 2014-10-17 15:16:47, "David Winsemius" <dwinsemius at comcast.net> wrote:
>> 
>> On Oct 16, 2014, at 10:36 PM, PO SU wrote:
>> 
>>> 
>>> Tks for your advice,  let the ++ problem alone, how to write an  
>>> Unary operator ? Is it permitted in R?
>>> such    as    a<-2 , a%+2%  will let a  be 4 .
>> 
>> OK, that's just wrong. Oh, OK, just for fun, as it were:
>> 
>> inc <- function(x)
>> {
>> eval.parent(substitute(x <- x + 1))
>> }
>> 
>> 
>>> inc(10)
>> Error in 10 <- 10 + 1 : invalid (do_set) left-hand side to assignment
>>> y=10
>>> inc(y)
>>> y
>> [1] 11
>> 
>> 
>>> I just want to know it , i won't pollute r with it , because i know  
>>> what is r .  : )
>>> 
>> It's certainly permitted. Just look at all the overloadings of the "+"  
>> operator in graphics packages. Look up the documentation on methods in  
>> R.
>> 
>> Why not just use a well-behaved function, though?
>> 
>> .inc <- function(x) x+1
>>> .inc(10)
>> [1] 11
>> 
>> Then you won't be tempted to try 10 <- .inc(10) because it just  
>> wouldn't make sense.
>> 
>> -- 
>> David.
>> 
>>> --
>>> 
>>> PO SU
>>> mail: desolator88 at 163.com
>>> Majored in Statistics from SJTU
>>> 
>>> 
>>> 
>>> 
>>> At 2014-10-17 13:09:47, "Rolf Turner" <r.turner at auckland.ac.nz> wrote:
>>>> On 17/10/14 17:29, PO SU wrote:
>>>>> 
>>>>> Dear expeRts,
>>>>>  Now i want to know how to implement an Unary operator like  i++  
>>>>> in cpp's  synax form.
>>>>>  e.g.   2++  will let 2 be 3 ,  a<-2 ,a++ ,will let a be 3
>>>>> I tried this :
>>>>> '%++%'<-function(x){
>>>>>   x<<-x+1
>>>>> }
>>>>> but it have problem, the biggest one is it seems the function need
>>>>> twoparams like a%++%b , how to write a function needing just one  
>>>>> param?
>>>>> 
>>>>> TKS !
>>>> 
>>>> Just ***DON'T***.  The "++" operator is useful only for those wish to
>>>> write code which is obscure to the point of incomprehensibility.  It
>>>> makes C and its offspring "write only" languages.
>>>> 
>>>> If you are going to use R, use R and don't pollute it with such
>>>> abominations.
>>>> 
>>>> cheers,
>>>> 
>>>> Rolf Turner
>>>> 
>>>> 
>>>> -- 
>>>> Rolf Turner
>>>> Technical Editor ANZJS
>>> ______________________________________________
>>> R-help at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>> 
>> David Winsemius, MD
>> Alameda, CA, USA
>> 

David Winsemius
Alameda, CA, USA



More information about the R-help mailing list