From luke at stat.uiowa.edu  Tue Jun 23 16:46:37 2009
From: luke at stat.uiowa.edu (luke at stat.uiowa.edu)
Date: Tue, 23 Jun 2009 09:46:37 -0500 (CDT)
Subject: [Rd] Accessing an object from the function in its .Data slot?
In-Reply-To: <4A40BE59.7050804@stats.uwo.ca>
References: <116117690906230348m6aca035bo9ea96f7569ed86b7@mail.gmail.com>
	<4A40BE59.7050804@stats.uwo.ca>
Message-ID: <alpine.LFD.2.00.0906230946110.7161@nokomis.stat.uiowa.edu>

sys.function might be useful.

luke

On Tue, 23 Jun 2009, Duncan Murdoch wrote:

> Martin Kober wrote:
>> I have an S4 object extending "function". Is it there a good way to
>> access the object (resp. its slots) from within the function in .Data?
>> 
>
> I don't think so.  That's not really the way the S4 object system is designed 
> to work.  If a function needs access to an object, the object should be one 
> of the args to the function, or defined in its environment.  Where the 
> function happens to be stored is irrelevant.
>
> Duncan Murdoch
>> If I'm reading help files correctly, it is not possible to overload
>> '(' (which would be the most elegant solution, I suppose).  I can
>> enclose the slotted data in the function when it is created, but that
>> obviously doesn't work when that data changes later on (also it
>> duplicates the data).
>> 
>> I tried to use the call stack, and this does seem to work:
>>
>> 
>>> setClass("abcd", representation(.Data="function", x="character"))
>>> a = new("abcd",
>>>     .Data=function() str( get( as.character( sys.call()[[1]] ), 
>>> pos=parent.frame() ) ),
>>>     x="testtxt")
>>> a()
>>> 
>> Formal class 'abcd' [package ".GlobalEnv"] with 2 slots
>>   ..@ .Data:function (x)
>>   ..@ x    : chr "testtxt"
>> 
>> That is obviously a not-so-elegant hack, and I'm not sure it works
>> under all circumstances as I'm not an expert on R's call system.
>> 
>> Is there any better way to achieve this?
>> 
>> Thanks in advance
>> Martin
>> 
>> ______________________________________________
>> 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
>

-- 
Luke Tierney
Chair, Statistics and Actuarial Science
Ralph E. Wareham Professor of Mathematical Sciences
University of Iowa                  Phone:             319-335-3386
Department of Statistics and        Fax:               319-335-3017
    Actuarial Science
241 Schaeffer Hall                  email:      luke at stat.uiowa.edu
Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu



[Rd] Accessing an object from the function in its .Data slot?
luke at stat.uiowa.edu