[Rd] Defining environments within functions
    Giles Hooker 
    gjh27 at cornell.edu
       
    Thu Aug 28 03:50:58 CEST 2008
    
    
  
How can I define environments within a function so that they are visible
to calls to a sub-function?
I have defined an objective function,
	ProfileErr = function(params,...)
which I would like to optimize using standard routines (optim,
nlminb,....) but which contains auxiliary variables which need to be
updated along with params. No optimization routine in R that I have
found has facilities for this.
Specifically, within ProfileErr, I need to calculate
  	coefs(params,...)
This a function which requires a further optimization, and I can achieve
significant efficiency gains by starting  where the last optimization
ended, so I would like to keep track of it.
At the command line, I get around this by
	ProfileEnv = new.env()
	assign('coefs',coefs,3,ProfileEnv)
and within ProfileErr, I can call
	startcoefs = get('coefs',envir=ProfileEnv)
	* do the optimization to get newcoefs *
	assign('coefs',newcoefs,3,ProfileEnv)
Then calling
	optim(pars,ProfileErr,....)
works fine. However, when I try to wrap all of that in its own function
	profile.estimate = fn(pars,...){
		ProfileEnv = new.env()
		assign('coefs',coefs,3,ProfileEnv)
	
		res = optim(pars,ProfileErr,....)
	}
ProfileErr no longer sees ProfileEnv. I haven't been able to make much
sense out of the documentation on environments, but is there a way to
make this work? Otherwise I'm back to writing variables out to files.
Many thanks,
Giles
-- 
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
-- 
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