[R] How to save R "clean" sessions in BATCH mode?
Emmanuel Charpentier
charpent at bacbuc.dyndns.org
Mon May 18 08:09:13 CEST 2009
Le samedi 16 mai 2009 à 17:21 +0200, mcnda839 at mncn.csic.es a écrit :
> Thanks a lot for all of you that have reply me about opening and
> ending R workspaces in BATCH mode. However replies were a king general
> and Im afraid I could not take the entire message from them.
> Therefore I chose to expose here a representative fraction of my work.
>
> I have 50 Rdata files (F1,F2,F3,F4,
,F50) with objects inside.
> I need to:
>
> open F1:
> - perform some simple operations with the objects
> - export the solution with write.table
> - end F1 session
> open F2
> repeat procedures as F1
>
> open F50
> repeat procedures as F1
>
>
> My difficulty here is to end a workspace and open one from the scratch
> to avoid mixing files from consecutive worksessions, and thus using R
> memory unnecessarily. I could use rm() to delete objects from the
> previous sessions but it seems not an efficient task.
And re-loading R, rebuilding a whole process context, re-allocating
memory is an efficient one ?
Hah !
> Any suggestions on how to perform this in Batch Mode? An examplified
> help would be nice!
Why not encapsulate your procedures in a function taking the filename as
its argument and loopîng on the filenames list ? Anything created in the
function, being local to the function, will be (efficiently) cleaned up
at the function exit. Magic...
Exemple :
> ls()
character(0)
> Foo<-runif(10,0,1)
> ls()
[1] "Foo"
> ?save.image
> save.image("Foo1.RData")
> ls()
[1] "Foo"
> rm(list=ls())
> Foo<-letters[round(runif(10,min=1,max=26))]
> Foo
[1] "v" "m" "b" "y" "g" "u" "r" "f" "y" "q"
> save.image("Foo2.RData")
> rm(list=ls())
> bar<-edit()
bar<-edit()
Waiting for Emacs...
> bar
function(filename) {
load(file=filename)
print(ls())
print(Foo)
invisible(NULL)
}
> ls()
[1] "bar"
> bar("Foo1.RData")
[1] "filename" "Foo" # Note : by default, ls() list the function's
# environment, not the global one... **> no "bar" here...
[1] 0.8030422 0.6326055 0.8188481 0.6161665 0.5917206 0.6631358
0.7290200
[8] 0.2970315 0.2016259 0.4473244
> ls()
[1] "bar" # Bar is still in the global environment...
> bar("Foo2.RData")
[1] "filename" "Foo"
[1] "v" "m" "b" "y" "g" "u" "r" "f" "y" "q"
> ls()
[1] "bar"
>
Good enough for you ?
HTH,
Emmanuel Charpentier
More information about the R-help
mailing list