Tengo un archivo, llamado a.r
, tiene un chmod
755,
sayHello <- function(){
print('hello')
}
sayHello()
¿Cómo puedo ejecutar esto a través de la línea de comandos?
#!/usr/bin/env Rscript
Tengo un archivo, llamado a.r
, tiene un chmod
755,
sayHello <- function(){
print('hello')
}
sayHello()
¿Cómo puedo ejecutar esto a través de la línea de comandos?
#!/usr/bin/env Rscript
Respuestas:
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.R
eso 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 methods
paquete 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.R
forma 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 .
R CMD BATCH
es terrible. Cualquier cosa menos eso ...
R CMD INSTALL -l ~/R/lib-dev
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 root
privilegios:
R -e 'install.packages(c("package1", "package2"), lib="/usr/local/lib/R/site-library")'
Rscript -e "getwd()"
en la terminal. Rscript solo imprimirá la salida del comando y no el mensaje de inicio completo de R.
r -e "cat(getwd(),'\n')"
si tiene instalado Littler. En esta respuesta, Dirk Eddelbuettel explica la diferencia entre littler y Rscript.
R -e 'install.packages("package", repos="http://cran.us.r-project.org")'
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.packages
error son solo advertencias.
Una forma más de ejecutar un script R desde la línea de comando sería:
R < scriptName.R --no-save
o con --save
.
Consulte también ¿Cuál es la mejor manera de usar scripts R en la línea de comandos (terminal)? .
Necesita el ?Rscript
comando 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()
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")'
R -e 'markdown::rpubsUpload("normalDev","NormalDevconJuly.html")'
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
Solo para documentación, a veces necesitas ejecutar el script como sudo
:
sudo Rscript path/to/your/file.R