Ejecutar script R desde la línea de comando


484

Tengo un archivo, llamado a.r, tiene un chmod755,

sayHello <- function(){
   print('hello')
}

sayHello()

¿Cómo puedo ejecutar esto a través de la línea de comandos?



55
tl; dr: solo agregue como la primera línea de su script:#!/usr/bin/env Rscript
michael

Respuestas:


671

Si desea que la salida se imprima en el terminal, es mejor usar Rscript

Rscript a.R

Tenga en cuenta que al usar R CMD BATCH a.Reso en lugar de redirigir la salida a la salida estándar y mostrar en la terminal, se creará un nuevo archivo llamado a.Rout.

R CMD BATCH a.R
# Check the output
cat a.Rout

Otra cosa a tener en cuenta sobre el uso de Rscript es que no carga el methodspaquete de forma predeterminada, lo que puede causar confusión. Entonces, si confía en cualquier cosa que proporcionen los métodos, querrá cargarlo explícitamente en su secuencia de comandos.

Si realmente desea utilizar la ./a.Rforma de llamar al script, puede agregar un apropiado #!a la parte superior del script

#!/usr/bin/env Rscript
sayHello <- function(){
   print('hello')
}

sayHello()

También notaré que si está ejecutando en un sistema * unix, existe el útil paquete littler que proporciona una tubería de línea de comando fácil a R. ¿Puede ser necesario usar littler para ejecutar aplicaciones brillantes a través de un script? Se pueden encontrar más detalles en esta pregunta .


28
Sin el #! su línea de comando intenta ejecutarlo como un script de línea de comando, utilizando el mismo intérprete que interpreta sus comandos. No sabe que se supone que es R, incluso si el archivo termina en un sufijo .R o .r. Los #! le dice a la línea de comando qué idioma está contenido en el archivo.
Spacedman

44
Tomé algunas preguntas aquí a lo largo de los años y pude hacer referencia tanto a Littler como a Rscript. Lo principal es decirle a la gente, como lo hiciste, que R CMD BATCHes terrible. Cualquier cosa menos eso ...
Dirk Eddelbuettel

@Dason También estoy trabajando con el script R y estoy tratando de ejecutar el script R desde el programa Java y veo algún error. Aquí está mi pregunta . Mira si puedes ayudar. Estoy usando su ejemplo de función hello por ahora para simplificarlo.
user1950349

¿Hay alguna manera de modificar la ruta de la biblioteca en el comando en sí? Algo similar aR CMD INSTALL -l ~/R/lib-dev
mikemtnbikes

@mikemtnbikes No que yo sepa. Siempre se puede agregar algo para cambiar .libPaths () dentro del script. Pero no veo ninguna opción como esa señalada en la página del manual para Rscript.
Dason

107

Esto no responde la pregunta directamente. Pero alguien puede terminar aquí porque quiere ejecutar una línea de R desde la terminal. Por ejemplo, si solo desea instalar algunos paquetes faltantes y salir, este oneliner puede ser muy conveniente. Lo uso mucho cuando de repente descubro que me faltan algunos paquetes y quiero instalarlos donde quiero.

  • Para instalar en la ubicación predeterminada:

    R -e 'install.packages(c("package1", "package2"))'
  • Para instalar en una ubicación que requiere rootprivilegios:

    R -e 'install.packages(c("package1", "package2"), lib="/usr/local/lib/R/site-library")' 

55
Para ejecutar un comando también podría usarlo Rscript -e "getwd()"en la terminal. Rscript solo imprimirá la salida del comando y no el mensaje de inicio completo de R.
Paul Rougieux

También puede usarlo r -e "cat(getwd(),'\n')"si tiene instalado Littler. En esta respuesta, Dirk Eddelbuettel explica la diferencia entre littler y Rscript.
Paul Rougieux

2
¡Gracias por anticipar mi problema! Necesitaba una cosa más:R -e 'install.packages("package", repos="http://cran.us.r-project.org")'
Erin

44
Se debe usar R -r 'options(warn=2); install...'para detener la ejecución y obtener un código de error distinto de cero en caso de que falle la instalación. De lo contrario, cualquier install.packageserror son solo advertencias.
rvernica


21

Necesita el ?Rscriptcomando para ejecutar un script R desde la terminal.

Echa un vistazo a http://stat.ethz.ch/R-manual/R-devel/library/utils/html/Rscript.html

Ejemplo

## example #! script for a Unix-alike

#! /path/to/Rscript --vanilla --default-packages=utils
args <- commandArgs(TRUE)
res <- try(install.packages(args))
if(inherits(res, "try-error")) q(status=1) else q()

Este fue solo un ejemplo de cómo escribiría / ejecutaría un script R, en su archivo agregue #! / Path / to / rscript y luego chmod + x <your script.r> y ./<your script.r>
Mehul Rathod

10

Cómo ejecutar Rmd en comando con knitr y rmarkdown mediante múltiples comandos y luego subir un archivo HTML a RPubs

Aquí hay un ejemplo: cargue dos bibliotecas y ejecute un comando R

R -e 'library("rmarkdown");library("knitr");rmarkdown::render("NormalDevconJuly.Rmd")'

R -e 'library("markdown");rpubsUpload("normalDev","NormalDevconJuly.html")'

3
Tenga en cuenta que será más sencillo omitir la carga de la biblioteca; R -e 'markdown::rpubsUpload("normalDev","NormalDevconJuly.html")'
gregmacfarlane

3

Otra forma de usar Rscript para sistemas * Unix es la sustitución de procesos .

Rscript <(zcat a.r)
# [1] "hello"

Lo que obviamente hace lo mismo que la respuesta aceptada, pero esto le permite manipular y ejecutar su archivo sin guardar el poder de la línea de comando, por ejemplo:

Rscript <(sed s/hello/bye/ a.r)
# [1] "bye"

Similar a Rscript -e "Rcode"esto también permite ejecutar sin guardar en un archivo. Por lo tanto, podría usarse junto con scripts que generan código R, por ejemplo:

Rscript <(echo "head(iris,2)")
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1          5.1         3.5          1.4         0.2  setosa
# 2          4.9         3.0          1.4         0.2  setosa

3

Solo para documentación, a veces necesitas ejecutar el script como sudo:

sudo Rscript path/to/your/file.R

2
¿Cuándo necesitas hacer eso?
simplegamer
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.