From martin.kober at gmail.com  Tue Jun 23 12:48:39 2009
From: martin.kober at gmail.com (Martin Kober)
Date: Tue, 23 Jun 2009 12:48:39 +0200
Subject: [Rd] Accessing an object from the function in its .Data slot?
Message-ID: <116117690906230348m6aca035bo9ea96f7569ed86b7@mail.gmail.com>

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?

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



[Rd] Accessing an object from the function in its .Data slot?
Martin Kober