In trying to streamline various optimization functions, I would like to have a scratch pad of working data that is shared across a number of functions. These can be called from different levels within some wrapper functions for maximum likelihood and other such computations. I'm sure there are other applications that could benefit from this.

Below are two approaches. One uses the <<- assignment to a structure I call OPCON. The other attempts to create an environment with this name, but fails. Though I have looked at a number of references, I have so far not found an adequate description of how to specify where the OPCON environment is located. (Both the green and blue books do not cover this topic, at least not under "environment" in the index.)

Is there a recommended approach to this? I realize I could use argument lists, but they get long and tedious with the number of items I may need to pass, though passing the OPCON structure in and out might be the proper way. An onAttach() approach was suggested by Paul Gilbert and tried, but it has so far not succeeded and, unfortunately, does not seem to be usable from source() i.e., cannot be interpreted but must be built first.

JN

Example using <<-

rm(list=ls())
optstart<-function(npar){ # create structure for optimization computations
   # npar is number of parameters ?? test??
   OPCON<<-list(MAXIMIZE=TRUE, PARSCALE=rep(1,npar), FNSCALE=1,
       KFN=0, KGR=0, KHESS=0)
   # may be other stuff
   ls(OPCON)
}

add1<-function(){
   OPCON$KFN<<-1+OPCON$KFN
   test<-OPCON$KFN
}

OPCON<<-list(MAXIMIZE=TRUE, PARSCALE=rep(1,4), FNSCALE=1,
       KFN=0, KGR=0, KHESS=0)
ls(OPCON)
print(add1())
print(add1())
print(ls.str())

rm(OPCON) # Try to remove the scratchpad
print(ls())

tmp<-readline("Now try from within a function")
setup<-optstart(4) # Need to sort out how to set this up appropriately
cat("setup =")
print(setup)

print(add1())
print(add1())

rm(OPCON) # Try to remove the scratchpad

======================
Example (failing) using new.env:

rm(list=ls())
optstart<-function(npar){ # create structure for optimization computations
   # npar is number of parameters ?? test??
   OPCON<-new.env(parent=globalenv())
   OPCON<-list(MAXIMIZE=TRUE, PARSCALE=rep(1,npar), FNSCALE=1,
       KFN=0, KGR=0, KHESS=0)
   # may be other stuff
   ls(OPCON)
}

add1<-function(){
   OPCON$KFN<-1+OPCON$KFN
   test<-OPCON$KFN
}

OPCON<-new.env(parent=globalenv())
OPCON<-list(MAXIMIZE=TRUE, PARSCALE=rep(1,4), FNSCALE=1,
       KFN=0, KGR=0, KHESS=0)
ls(OPCON)
print(add1())
print(add1())
print(ls.str())

rm(OPCON) # Try to remove the scratchpad
print(ls())

tmp<-readline("Now try from within a function")
setup<-optstart(4) # Need to sort out how to set this up appropriately
cat("setup =")
print(setup)

print(add1())
print(add1())

rm(OPCON) # Try to remove the scratchpad

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to