que ejecutar comandos comando bash r

comandos - ejecutar bash linux



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

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 programa 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


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:

[ramanujan:~]$cat foo.R print(rnorm(10)) [ramanujan:~]$R CMD BATCH foo.R [ramanujan:~]$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 restored] ~/.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.


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.


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


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!


Prueba littler . 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.


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


Si el programa 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:~$



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.


#!/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