¿Cuál es la mejor manera de utilizar los scripts R en la línea de comandos (terminal)?

Es muy conveniente tener scripts R para hacer gráficas simples desde la línea de comando. Sin embargo, ejecutar R desde los scripts bash no es conveniente en absoluto. El ideal podría ser algo así como

#!/path/to/R ... 

o

 #!/usr/bin/env R ... 

pero no he podido hacer ninguno de esos trabajos.

Otra opción es mantener los scripts puramente en R, por ejemplo script.R , e invocarlo con R --file=script.R o similar. Sin embargo, de vez en cuando una secuencia de comandos se basará en interruptores de línea de comando oscuros en cuyo punto parte del código existe fuera de la secuencia de comandos. Ejemplo: introducir cosas furtivamente en R desde bash a través de un .Rprofile local, los switches deseados son entonces todo --vanilla implica excepto --no-init-file .

Otra opción es una secuencia de comandos bash para almacenar las banderas R y ser ejecutable fácilmente, que luego llama al guión R. El problema es que esto significa que un solo progtwig acaba de dividirse en dos archivos que ahora tienen que mantenerse sincronizados, transferirse a máquinas nuevas, etc.

La opción que actualmente menosprecio es incorporar el R en un script bash:

 #!/bin/bash ... # usage message to catch bad input without invoking R ... # any bash pre-processing of input ... # etc R --random-flags <<RSCRIPT # R code goes here RSCRIPT 

Todo está en un solo archivo. Es ejecutable y maneja fácilmente los argumentos. El problema es que combinar bash y R como este elimina la posibilidad de que cualquier IDE no falle en uno u otro, y hace que mi corazón duela realmente mal.

¿Hay alguna forma mejor en la que me estoy perdiendo?

Contenido de script.r :

 #!/usr/bin/Rscript cat("Hello") 

Invocación de línea de comando:

 ./script.r 

Prueba poco . littler proporciona la función hash-bang (es decir, script que comienza con #! / some / path) para GNU R, así como el uso simple de línea de comandos y tuberías.

#!/path/to/R no funcionará porque R es en sí mismo un script, por lo que execve está contento.

Yo uso R --slave -f script

La respuesta de Miguel Sánchez es la forma en que debería ser. La otra forma de ejecutar Rscript podría ser el comando ‘env’ para ejecutar el sistema completo de RScript.

 #!/usr/bin/env Rscript 

Si le interesa analizar los argumentos de la línea de comando en un script R, pruebe con el comando RScript, que se incluye con R a partir de la versión 2.5.x.

http://stat.ethz.ch/R-manual/R-patched/library/utils/html/Rscript.html

Esto funciona,

 #!/usr/bin/Rscript 

pero no sé qué sucederá si tiene más de 1 versión de R instalada en su máquina.

Si lo haces así

 #!/usr/bin/env Rscript 

le dice al intérprete que simplemente use cualquier R que aparezca primero en su ruta.

Solo una nota para agregar a esta publicación. Las versiones posteriores de R parecen haber enterrado algo a Rscript . Para R 3.1.2-1 en OSX descargado en enero de 2015 encontré Rscript en

 /sw/Library/Frameworks/R.framework/Versions/3.1/Resources/bin/Rscript 

Entonces, ¡en lugar de algo como #! /sw/bin/Rscript #! /sw/bin/Rscript , necesitaba usar lo siguiente en la parte superior de mi script.

 #! /sw/Library/Frameworks/R.framework/Versions/3.1/Resources/bin/Rscript 

El locate Rscript puede ser útil para usted.

Si el progtwig que está utilizando para ejecutar su script necesita parámetros, ¡puede ponerlos al final del #! línea:

 #!/usr/bin/R --random --switches --f 

Sin saber R, no puedo realizar pruebas correctamente, pero parece que funciona:

 axa@artemis:~$ cat r.test #!/usr/bin/R -q -f error axa@artemis:~$ ./r.test > #!/usr/bin/R -q -f > error Error: object "error" not found Execution halted axa@artemis:~$ 

Es posible que desee utilizar el módulo rpy2 de python. Sin embargo, la forma “correcta” de hacerlo es con R CMD BATCH. Puede modificar esto para escribir en STDOUT, pero el valor predeterminado es escribir en un archivo .Rout. Vea el siguiente ejemplo:

 [twignujan:~]$cat foo.R print(rnorm(10)) [twignujan:~]$R CMD BATCH foo.R [twignujan:~]$cat foo.Rout R version 2.7.2 (2008-08-25) Copyright (C) 2008 The R Foundation for Statistical Computing ISBN 3-900051-07-0 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. [Previously saved workspace restred] ~/.Rprofile loaded. Welcome at Fri Apr 17 13:33:17 2009 > print(rnorm(10)) [1] 1.5891276 1.1219071 -0.6110963 0.1579430 -0.3104579 1.0072677 -0.1303165 0.6998849 1.9918643 -1.2390156 > Goodbye at Fri Apr 17 13:33:17 2009 > proc.time() user system elapsed 0.614 0.050 0.721 

Nota: querrá probar la –vanilla y otras opciones para eliminar todo el cruft de inicio.

Pruebe smallR para escribir scripts R rápidos en la línea de comando:

http://code.google.com/p/simple-r/

(comando r en el directorio)

Trazar desde la línea de comando usando smallR se vería así:

 r -p file.txt 

Lo siguiente funciona para mí usando MSYS bash en Windows: no tengo R en mi cuadro de Linux, así que no puedo probarlo allí. Necesita dos archivos: el primero llamado runr ejecuta R con un parámetro de archivo

 # this is runr # following is path to R on my Windows machine # plus any R params you need c:/r/bin/r --file=$1 

Necesitas hacer este ejecutable con chmod + x runr .

Luego en tu archivo de script:

 #!runr # some R commands x = 1 x 

Nota la #! La línea runr puede necesitar incluir la ruta completa a runr, dependiendo de cómo esté usando el comando, cómo se establece su variable PATH, etc.

¡No es bonito, pero parece funcionar!

¿Alguna vez sabe que puede usar su navegador para usar RStudio en el servidor?

http://www.rstudio.com/products/rstudio/download-server/