From gjh27 at cornell.edu  Fri Aug 29 12:52:10 2008
From: gjh27 at cornell.edu (Giles Hooker)
Date: Fri, 29 Aug 2008 06:52:10 -0400
Subject: [Rd] Defining environments within functions
In-Reply-To: <48B6812E.70809@stats.uwo.ca>
References: <48B60482.5010306@cornell.edu> <48B6812E.70809@stats.uwo.ca>
Message-ID: <48B7D4DA.7030706@cornell.edu>


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



[Rd] Defining environments within functions
Giles Hooker