run - ¿Por qué(o cuándo) es Rscript(o más pequeño) mejor que R CMD BATCH?
run r script from command line windows (2)
Estoy automatizando algunos webscraping con R
en cron
y algunas veces uso R CMD BATCH
y algunas veces uso Rscript
.
Para decidir cuál usar, me enfoco principalmente si quiero el archivo .Rout
o no.
Pero al leer las respuestas a algunas preguntas aquí en SO (como this o this ) parece que Rscript
es preferible a R CMD BATCH
.
Entonces mis preguntas son:
Además del hecho de que la sintaxis es un poco diferente y
R CMD BATCH
guarda un archivo.Rout
mientras queRscript
no, ¿cuáles son las principales diferencias entre los dos?¿Cuándo debería preferir uno sobre otro? Más específicamente, en el trabajo
cron
mencionado anteriormente, ¿se prefiere uno de ellos?Todavía no he usado
littler
, ¿cómo es diferente deRscript
yR CMD BATCH
?
Por lo que entiendo:
R CMD LOTE:
- repetir las declaraciones de entrada
- no puede salir a stdout
Rscript:
- NO hace eco
- salida a stdout
- se puede utilizar en un solo liner (es decir, sin archivo de entrada)
más pequeño:
- todo lo que Rscript hace
- puede leer comandos desde stdin (útil para canalización)
- tiempo de arranque más rápido
- cargar el paquete de métodos
En la práctica, uso Rscript para ejecutar scripts, en línea de comandos o en crons.
R CMD BATCH
es todo lo que teníamos hace años. Hace que i / o sea muy difícil y deja archivos atrás.
Las cosas mejoraron, primero con Littler y luego también con Rscript. Ambos se pueden usar para líneas ''shebang'' como
#!/usr/bin/r
#!/usr/bin/Rscript
y ambos se pueden usar con paquetes como getopt y optparse --- permitiéndole escribir scripts R adecuados que pueden actuar como comandos. Si tengo docenas de ellas, comenzando con simples como esta que puedo llamar como install.r pkga pkgb pkgc
y que instalará las tres y sus dependencias) para mí desde la línea de comandos sin acaparar el prompt R:
#!/usr/bin/env r
#
# a simple example to install one or more packages
if (is.null(argv) | length(argv)<1) {
cat("Usage: installr.r pkg1 [pkg2 pkg3 ...]/n")
q()
}
## adjust as necessary, see help(''download.packages'')
repos <- "http://cran.rstudio.com"
## this makes sense on Debian where no packages touch /usr/local
lib.loc <- "/usr/local/lib/R/site-library"
install.packages(argv, lib.loc, repos)
Y al igual que Karl, tengo cronjobs llamando a scripts R similares.
Edit on 2015-11-04: A partir de la semana pasada, littler ahora también está en CRAN .