[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 I’m 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