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.