Thanks Gabor, I had not thought of using environments like that. It looks like it can be done even simpler:
fun3 <- function() { e <- environment() tmp <- matrix( nrow=0, ncol=2 ) fun4 <- function(x) { e$tmp <- rbind(e$tmp, x) (x[1] - 3)^2 + (x[2]-5)^2 } out <- optim( c(0,0), fun4 ) list( out=out, vals=tmp ) } tmp <- fun3() plot( tmp$vals, type='l' ) Now I can start removing all the "<<-"s from my code. -- Gregory (Greg) L. Snow Ph.D. Statistical Data Center Intermountain Healthcare greg.s...@imail.org 801.408.8111 > -----Original Message----- > From: Gabor Grothendieck [mailto:ggrothendi...@gmail.com] > Sent: Wednesday, April 14, 2010 11:36 AM > To: Greg Snow > Cc: Tal Galili; r-help@r-project.org > Subject: Re: [R] <<- how/when/why do you use it? > > x <<- will usually wind up assigning into the parent or global > environment but since it depends on what is already there the > following are safer: > > e <- environment() > parent.env(e)$x <- 1 > > globalenv()$x <- 2 > > Typically in cases like this the function that contains the assignment > can be regarded as a method of the object containing x so an OO > approach can be taken such as facilitated by the proto package. Here > p is defined to be a proto object with method square.x and property x. > > > library(proto) > > p <- proto(x = 2, square.x = function(.) .$x <- .$x^2) > > p$x > [1] 2 > > p$square.x() > > p$x > [1] 4 > > > > On Wed, Apr 14, 2010 at 11:42 AM, Greg Snow <greg.s...@imail.org> > wrote: > > The <<- assignment operator is very powerful, but can be dangerous as > well. When tempted to use it, look for alternatives first, there may > be a better way. But having said that, I am one of the more guilty > people for using it (quite a few of the functions in the TeachingDemos > package use <<-). > > > > The main use that I see is when you are using a function written by > someone else that takes one of your functions as an argument and you > want to save information from your function that is not being passed > back through the calling function. For example you may want to trace > the calls to your function that is being called by optim, just define > your function A which defines within it function B which is to be > optimized, A also contains an empty vector to store results in, then A > calls optim passing B to it, B uses <<- to update the vector in A every > time that it is called, now A has the results of optim and also a trace > of info on all the calls to B. > > > > <<- can also be used for package local variables (less evil than > globals) where within a package you can call one function to set some > things up, then other functions in the package can refer to the > variable created to see the setup as well as modifying options local to > the package. > > > > Hope this helps, > > > > -- > > Gregory (Greg) L. Snow Ph.D. > > Statistical Data Center > > Intermountain Healthcare > > greg.s...@imail.org > > 801.408.8111 > > > > > >> -----Original Message----- > >> From: r-help-boun...@r-project.org [mailto:r-help-boun...@r- > >> project.org] On Behalf Of Tal Galili > >> Sent: Tuesday, April 13, 2010 8:03 AM > >> To: r-help@r-project.org > >> Subject: [R] <<- how/when/why do you use it? > >> > >> Hi all, > >> > >> Today I came across scoping in the R > >> intro<http://cran.r-project.org/doc/manuals/R-intro.html#Scope> > (after > >> reading Robert Gentleman > >> fortune<http://rfortunes.posterous.com/im-always-thrilled-when- > people- > >> discover-what> > >> on > >> lexical scooping) , and am very curious about the <<- assignment. > >> > >> The manual showed one (very interesting) example for "<<-", which I > >> feel I > >> understood. What I am still missing is the context of when this can > be > >> useful. > >> > >> So what I would love to read from you are examples (or links to > >> examples) on > >> when using "<<-" can be interesting/useful. What might be the > dangers > >> of > >> using it (it looks easy to loose track of), and any tips you might > feel > >> like > >> sharing. > >> > >> Thanks, > >> Tal > >> > >> > >> ----------------Contact > >> Details:------------------------------------------------------- > >> Contact me: tal.gal...@gmail.com | 972-52-7275845 > >> Read me: www.talgalili.com (Hebrew) | www.biostatistics.co.il > (Hebrew) > >> | > >> www.r-statistics.com (English) > >> -------------------------------------------------------------------- > --- > >> ----------------------- > >> > >> [[alternative HTML version deleted]] > >> > >> ______________________________________________ > >> 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. > > > > ______________________________________________ > > 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. > > ______________________________________________ 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.