[Rd] Defining environments within functions
Giles Hooker
gjh27 at cornell.edu
Fri Aug 29 12:52:10 CEST 2008
Thanks,
I think I over-emphasized the secondary function, but I can generate the
scoping problem as follows. First, at the command line, I can get a
function to access objects that were not in its arguments by
ProfileEnv = new.env()
hello.world = "Hello World"
assign('hello.world',hello.world,3,envir=ProfileEnv)
fn1 = function()
{
hw = get('hello.world',envir=ProfileEnv)
print(hw)
}
and then call
> fn1()
[1] "Hello World"
Now I want to define a wrapper function
fn2 = function()
{
ProfileEnv = new.env()
hello.world = "Hello World"
assign('hello.world',hello.world,3,envir=ProfileEnv)
fn1()
}
and if I try
> rm(ProfileEnv) # Just to be safe
> rm(hello.world)
> fn2()
Error in get("hello.world", envir = ProfileEnv) :
object "ProfileEnv" not found
In my actual code, fn1() is really a call to
optim(pars,ProfileErr,....)
and hello.world are quantities that were calculated the last time that
ProfileErr was called and that I want to keep track of.
As an alternative simple example, how would I keep a counter for the
number of times that optim (or any other generic optimizer) has called
ProfileErr?
giles
>> How can I define environments within a function so that they are visible
>> to calls to a sub-function?
>>
>
> I think you need to give a simplified, runnable example. (Or at least
> runnable until it hits the scoping problem you've got.) "Sub-function"
> isn't R terminology, and it's not clear what you mean by it.
--
Giles Hooker
Assistant Professor:
Department of Biological Statistics and Computational Biology
Department of Statistical Science
1186 Comstock Hall
Cornell University
Ithaca, NY, 14853
Ph: (+1 607) 255 1638
Fax: (+1 607) 255 4698
Email: giles.hooker at cornell.edu
More information about the R-devel
mailing list