[Rd] Defining a method that behaves like '$'?

Renaud Gaujoux renaud at mancala.cbio.uct.ac.za
Fri Jul 9 15:10:08 CEST 2010


I do not want to access the slot itself but its content: a:toto would be 
a at slot1[['toto']].
The thing is that I would like to have two different methods: '$' (that 
I already have) and another one to define, ideally that behaves like '$'.
So in brief:
- a:toto would be for a at slot1[['toto']]
- a$tata would be for a at slot2[['tata']]

But apparently it might not be possible.

-- 
Renaud Gaujoux
Computational Biology - University of Cape Town
South Africa


On 09/07/2010 14:58, Marc Schwartz wrote:
> You were, in effect, trying to overload the ":" operator, which is of course for defining sequences.
>
> If you are using S4 methods, what is wrong with using the default "@" as the extraction syntax (eg. a at name) to get at slots?
>
> See ?"@" and ?slot
>
> HTH,
>
> Marc Schwartz
>
> On Jul 9, 2010, at 7:49 AM, Renaud Gaujoux wrote:
>
>    
>> Alright.
>> Maybe the symbol I chose was not appropriate. I tried ':' to be able to do 'a:name' with 'a' a S4 object.
>> I get the following error:
>> Error in genericForPrimitive(f) :
>>   methods may not be defined for primitive function ":" in this version of R
>>
>> Does there exist any symbol that would be suitable for the job?
>> Thanks
>>
>> -- 
>> Renaud Gaujoux
>> Computational Biology - University of Cape Town
>> South Africa
>>
>>
>> On 09/07/2010 14:29, Duncan Murdoch wrote:
>>      
>>> On 09/07/2010 8:18 AM, Renaud Gaujoux wrote:
>>>        
>>>> Hi,
>>>>
>>>> is there a way to define a method say '$$' that would behave like '$' and allow calls like 'a$$name'?
>>>>          
>>> No, the parser handles a fixed syntax, and that expression is not legal.  You could do it with
>>>
>>> a %$$% name
>>>
>>> using the infix operator syntax.  (I think the description in the R Language Definition suggests this is not legal, since $$ is not a valid name, but it does currently work and that's unlikely to change.)
>>>
>>> Duncan Murdoch
>>>        
>    

 

###
UNIVERSITY OF CAPE TOWN 

This e-mail is subject to the UCT ICT policies and e-mail disclaimer published on our website at http://www.uct.ac.za/about/policies/emaildisclaimer/ or obtainable from +27 21 650 4500. This e-mail is intended only for the person(s) to whom it is addressed. If the e-mail has reached you in error, please notify the author. If you are not the intended recipient of the e-mail you may not use, disclose, copy, redirect or print the content. If this e-mail is not related to the business of UCT it is sent by the sender in the sender's individual capacity.

###



More information about the R-devel mailing list