[R] Calling R from R and specifying "wait until script is finished"
Don MacQueen
macq at llnl.gov
Mon May 23 23:51:18 CEST 2005
I don't know about efficient, but here is a way that I find to be
practical, with around 100 R scripts.
I create a master R script (I call it "Runall.r"). It begins like this:
## Execute me with R --save < Runall.r >& Runall.log
hc <- TRUE
if (hc) sink('Runall.out')
t0runall <- Sys.time()
cat('========================================================\n')
cat('Running script "Runall.r" at',format(t0runall),'\n')
cat('========================================================\n')
msg <- try(source('ae-175.r')) ; rm.trymsg(msg)
msg <- try(source('ae-235.r')) ; rm.trymsg(msg)
msg <- try(source('ae-251.r')) ; rm.trymsg(msg)
msg <- try(source('ae-331.r')) ; rm.trymsg(msg)
msg <- try(source('ae-332.r')) ; rm.trymsg(msg)
msg <- try(source('ae-491.r')) ; rm.trymsg(msg)
msg <- try(source('ae-695.r')) ; rm.trymsg(msg)
msg <- try(source('ae-801.r')) ; rm.trymsg(msg)
## and so on, for as many scripts as I want to run
## although I constructed the list of scripts to run by hand, it
could easily be done
## as a loop, with the script names constructed from the loop index
## the script ends with:
cat('========================================================\n')
t1 <- Sys.time()
cat('[Runall.r] Elapsed
time',format(t1-t0runall),attributes(t1-t0runall)$units,'\n')
if (hc) {
cat('Done\n')
sink()
system('grep failed Runall.out > Runall.info')
cat('\n')
system('grep succeeded Runall.out >> Runall.info')
cat('\n')
cat('See files Runall.out and Runall.info\n')
cat('Done\n')
}
####
#### The function rm.trymsg() is this:
rm.trymsg <- function(msg) {
if (class(msg)=='try-error') {
cat('============',tblid,'failed =============\n')
return(FALSE)
}
if (data.class(msg)=='list'& unlist(msg)[[1]]=='bad.table') {
cat('============',tblid,'failed ===== bad.table ==========\n')
return(FALSE)
}
cat('=========',tblid,'succeeded =========\n')
TRUE
}
## and the purpose of using try() and rm.trymsg() is to let the job
continue if an error occurs in one of
## the scripts. Note, however, that the text strings "bad.table" and
"tblid" are unique to the task I am doing, and would not
## work in general.
At 8:51 PM -0400 5/21/05, Lapointe, Pierre wrote:
>Hello,
>
>Let's say I have 50 R scripts to run. What would be the most efficient way
>to run them?
>
>I thought I could do multiple Rterms in a DOS batch file:
>
>Ex:
>Rterm <1.R> 1.txt
>Rterm <2.R> 2.txt
>...
>Rterm <50.R> 50.txt
>
>However, I'm afraid they will all open at the same time. I know I could
>pause the batch file with something like:
>
>PING 1.1.1.1 -n 1 -w 60000 >NUL (to delay 60 seconds)
>
>But that would require that I know how long each of my scripts take.
>
>Is there an easier way? Something like calling R from R and specifying that
>the script has to be finished before continuing.
>
>Thanks
>
>Pierre Lapointe
>
>
>
>***********************************************************************************
>AVIS DE NON-RESPONSABILITE:\ Ce document transmis par courri...{{dropped}}
>
>______________________________________________
>R-help at stat.math.ethz.ch mailing list
>https://stat.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
--
--------------------------------------
Don MacQueen
Environmental Protection Department
Lawrence Livermore National Laboratory
Livermore, CA, USA
More information about the R-help
mailing list