Can anyone please tell me how can use save.image() function if it is placed
within a function (i.e. some level up from the base level environment)? Here I
experimented with following codes:
#rm(list=ls())
fn <- function() {
x <- rnorm(5)
save.image("f:/dat.RData")
}
fn()
However I see that, the object fn() is actually stored in dat.RData file, not
that "x". I have gone through the help page and saw there is some
argument named "envir"
My question is if I need to supply some value against that argument, then what
should be the name of the required environment?
Additionally is there any option to see the hierarchy of different environments
at my current R session?
Thanks,
Hi,
I do not believe you can use the save.image() function in this case.
save.image() is a wrapper for save() with defaults for the global
environment (your workspace). Try this instead, I believe it does
what you are after:
myfun <- function(x) {
y <- 5 * x + x^2
save(list = ls(envir = environment(), all.names = TRUE),
file = "myfile.RData", envir = environment())
}
Notice that for both save() and ls() I used the environment() function
to grab the current environment. This should mean that even if "y"
was defined globally, it would save a copy of the version inside your
function.
Hope that helps,
Josh
On Thu, Oct 14, 2010 at 9:25 AM, Megh Dal <megh700004 at yahoo.com>
wrote:> Can anyone please tell me how can use save.image() function if it is placed
within a function (i.e. some level up from the base level environment)? Here I
experimented with following codes:
>
>
> #rm(list=ls())
> fn <- function() {
> ? ?x <- rnorm(5)
> ? ?save.image("f:/dat.RData")
> ?}
> fn()
>
> However I see that, the object fn() is actually stored in dat.RData file,
not that "x". I have gone through the help page and saw there is some
argument named "envir"
> My question is if I need to supply some value against that argument, then
what should be the name of the required environment?
>
> Additionally is there any option to see the hierarchy of different
environments at my current R session?
>
> Thanks,
>
> ______________________________________________
> R-help at 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.
>
--
Joshua Wiley
Ph.D. Student, Health Psychology
University of California, Los Angeles
http://www.joshuawiley.com/
On Thu, Oct 14, 2010 at 11:56 AM, Joshua Wiley <jwiley.psych at gmail.com> wrote:> Hi, > > I do not believe you can use the save.image() function in this case. > save.image() is a wrapper for save() with defaults for the global > environment (your workspace). ?Try this instead, I believe it does > what you are after: > > myfun <- function(x) { > y <- 5 * x + x^2 > save(list = ls(envir = environment(), all.names = TRUE), > ? ? file = "myfile.RData", envir = environment()) > } > > Notice that for both save() and ls() I used the environment() function > to grab the current environment. ?This should mean that even if "y" > was defined globally, it would save a copy of the version inside your > function.I think the defaults are actually ok in this case:> myfun <- function(x) {+ y <- 5 * x + x^2 + save(list = ls(all.names = TRUE), file = "myfile.RData") + }> print(load("myfile.RData"))[1] "x" "y" Hadley -- Assistant Professor / Dobelman Family Junior Chair Department of Statistics / Rice University http://had.co.nz/
Thanks Joshua for your reply. However I could not understand one logic. If I write "ls(envir = environment(), all.names = TRUE)", I am actually telling R to grab all objects within the current environment (in my case, which the environment within fn()). Then what is the point to put again the same against "envir". By putting so, what I am going to tell R? Thanks, --- On Thu, 10/14/10, Joshua Wiley <jwiley.psych at gmail.com> wrote:> From: Joshua Wiley <jwiley.psych at gmail.com> > Subject: Re: [R] Query on save.image() > To: "Megh Dal" <megh700004 at yahoo.com> > Cc: r-help at stat.math.ethz.ch > Date: Thursday, October 14, 2010, 10:26 PM > Hi, > > I do not believe you can use the save.image() function in > this case. > save.image() is a wrapper for save() with defaults for the > global > environment (your workspace).? Try this instead, I > believe it does > what you are after: > > myfun <- function(x) { > y <- 5 * x + x^2 > save(list = ls(envir = environment(), all.names = TRUE), > ? ???file = "myfile.RData", envir > environment()) > } > > Notice that for both save() and ls() I used the > environment() function > to grab the current environment.? This should mean > that even if "y" > was defined globally, it would save a copy of the version > inside your > function. > > Hope that helps, > > Josh > > > On Thu, Oct 14, 2010 at 9:25 AM, Megh Dal <megh700004 at yahoo.com> > wrote: > > Can anyone please tell me how can use save.image() > function if it is placed within a function (i.e. some level > up from the base level environment)? Here I experimented > with following codes: > > > > > > #rm(list=ls()) > > fn <- function() { > > ? ?x <- rnorm(5) > > ? ?save.image("f:/dat.RData") > > ?} > > fn() > > > > However I see that, the object fn() is actually stored > in dat.RData file, not that "x". I have gone through the > help page and saw there is some argument named "envir" > > My question is if I need to supply some value against > that argument, then what should be the name of the required > environment? > > > > Additionally is there any option to see the hierarchy > of different environments at my current R session? > > > > Thanks, > > > > ______________________________________________ > > R-help at 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. > > > > > > -- > Joshua Wiley > Ph.D. Student, Health Psychology > University of California, Los Angeles > http://www.joshuawiley.com/ >