Buscar..


Introducción

Si desea aplicar rutinariamente un análisis de R a una gran cantidad de archivos de datos separados, o proporcionar un método de análisis repetible a otras personas, un script ejecutable de R es una forma fácil de hacerlo. En lugar de que usted o su usuario tengan que llamar a R y ejecutar su secuencia de comandos dentro de R a través de la source(.) O una llamada de función, su usuario simplemente puede llamar a la secuencia de comandos como si fuera un programa.

Observaciones

Para representar los canales de entrada / salida estándar, use el file("stdin") funciones file("stdin") (entrada desde el terminal u otro programa por conducto), stdout() (salida estándar) y stderr() (error estándar). Tenga en cuenta que si bien existe la función stdin() , no se puede utilizar cuando se suministra un script ya preparado a R, ya que leerá las siguientes líneas de ese script en lugar de las entradas del usuario.

La estructura básica del programa R independiente y cómo llamarlo

El primer script R independiente

Los scripts R independientes no son ejecutados por el programa R ( R.exe en Windows), sino por un programa llamado Rscript ( Rscript.exe ), que se incluye en su instalación R de manera predeterminada.

Para sugerir este hecho, las secuencias de comandos R independientes comienzan con una línea especial llamada línea Shebang , que contiene el siguiente contenido: #!/usr/bin/env Rscript . Bajo Windows, se necesita una medida adicional, que se detalla más adelante.

La siguiente secuencia de comandos R independiente simple guarda un histograma bajo el nombre de archivo "hist.png" de los números que recibe como entrada:

#!/usr/bin/env Rscript

# User message (\n = end the line)
cat("Input numbers, separated by space:\n")
# Read user input as one string (n=1 -> Read only one line)
input <- readLines(file('stdin'), n=1)
# Split the string at each space (\\s == any space)
input <- strsplit(input, "\\s")[[1]]
# convert the obtained vector of strings to numbers
input <- as.numeric(input)

# Open the output picture file
png("hist.png",width=400, height=300)
# Draw the histogram
hist(input)
# Close the output file
dev.off()

Puede ver varios elementos clave de un script R independiente. En la primera línea, ves la línea de Shebang. Seguido de eso, cat("....\n") se usa para imprimir un mensaje al usuario. Utilice el file("stdin") siempre que desee especificar "Entrada de usuario en la consola" como origen de datos. Esto se puede usar en lugar de un nombre de archivo en varias funciones de lectura de datos ( scan , read.table , read.csv , ...). Una vez que la entrada del usuario se convierte de cadenas a números, comienza el trazado. Allí, se puede ver, que los comandos de trazado que deben escribirse en un archivo deben estar encerrados en dos comandos. Estos son en este caso png(.) Y dev.off() . La primera función depende del formato de archivo de salida deseado (otras opciones comunes son jpeg(.) Y pdf(.) ). La segunda función, dev.off() siempre es necesaria. Escribe el trazado en el archivo y finaliza el proceso de trazado.

Preparación de un script R independiente

Linux / Mac

El archivo de la secuencia de comandos independiente primero debe ser ejecutable. Esto puede ocurrir haciendo clic derecho en el archivo, abriendo "Propiedades" en el menú de apertura y marcando la casilla de verificación "Ejecutable" en la pestaña "Permisos". Alternativamente, el comando

chmod +x PATH/TO/SCRIPT/SCRIPTNAME.R

Se puede llamar en una Terminal.

Windows

Para cada secuencia de comandos independiente, se debe escribir un archivo por lotes con el siguiente contenido:

"C:\Program Files\R-XXXXXXX\bin\Rscript.exe" "%~dp0\XXXXXXX.R" %*

Un archivo por lotes es un archivo de texto normal, pero que tiene una extensión *.bat excepto una extensión *.txt . Créelo usando un editor de texto como notepad (no Word ) o similar y ponga el nombre del archivo entre comillas "FILENAME.bat" ) en el cuadro de diálogo de guardar. Para editar un archivo por lotes existente, haga clic derecho en él y seleccione "Editar".

Tienes que adaptar el código que se muestra arriba en todas partes XXX... está escrito:

  • Inserte la carpeta correcta donde reside su instalación R
  • Inserte el nombre correcto de su script y colóquelo en el mismo directorio que este archivo por lotes.

Explicación de los elementos en el código: La primera parte "C:\...\Rscript.exe" le dice a Windows dónde encontrar el programa Rscript.exe . La segunda parte "%~dp0\XXX.R" le dice a Rscript que ejecute el script R que escribió en la misma carpeta que el archivo por lotes ( %~dp0 significa la carpeta del archivo por lotes). Finalmente, %* reenvía cualquier argumento de línea de comando que le dé al archivo por lotes a la secuencia de comandos R.

Si hace doble clic en el archivo por lotes, se ejecuta el script R Si arrastra archivos en el archivo por lotes, los nombres de archivo correspondientes se asignan al script R como argumentos de línea de comando.

Usando littler para ejecutar scripts R

littler (se pronuncia poco r ) ( cran ) ofrece, además de otras características, dos posibilidades para ejecutar scripts R desde la línea de comandos con el comando r de littler (cuando se trabaja con Linux o MacOS).

Instalando littler

Desde R:

install.packages("littler")

El camino de r se imprime en el terminal, como

You could link to the 'r' binary installed in
'/home/*USER*/R/x86_64-pc-linux-gnu-library/3.4/littler/bin/r'
from '/usr/local/bin' in order to use 'r' for scripting.

Para poder llamar a r desde la línea de comando del sistema, se necesita un enlace simbólico:

ln -s /home/*USER*/R/x86_64-pc-linux-gnu-library/3.4/littler/bin/r /usr/local/bin/r

Utilizando apt-get (Debian, Ubuntu):

sudo apt-get install littler

Usando littler con scripts estándar .r

Con r de littler es posible ejecutar scripts R independientes sin ningún cambio en el script. Ejemplo de script:

# User message (\n = end the line)
cat("Input numbers, separated by space:\n")
# Read user input as one string (n=1 -> Read only one line)
input <- readLines(file('stdin'), n=1)
# Split the string at each space (\\s == any space)
input <- strsplit(input, "\\s")[[1]]
# convert the obtained vector of strings to numbers
input <- as.numeric(input)

# Open the output picture file
png("hist.png",width=400, height=300)
# Draw the histogram
hist(input)
# Close the output file
dev.off()

Tenga en cuenta que no hay shebang en la parte superior de los scripts. Cuando se guarda como, por ejemplo, hist.r , se puede hist.r directamente desde el comando del sistema:

r hist.r

Usando littler en scripts shebanged

También es posible crear scripts R ejecutables con littler, con el uso del shebang

#!/usr/bin/env r

en la parte superior de la secuencia de comandos. El script R correspondiente debe hacerse ejecutable con chmod +X /path/to/script.r y se puede chmod +X /path/to/script.r directamente desde el terminal del sistema.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow