He estado usando R CMD BATCH my_script.R
desde una terminal para ejecutar un R
script. Ahora estoy en el punto en el que me gustaría pasar un argumento al comando, pero tengo algunos problemas para que funcione. Si lo hago, R CMD BATCH my_script.R blabla
se blabla
convierte en el archivo de salida, en lugar de ser interpretado como un argumento disponible para el script R que se está ejecutando.
He intentado Rscript my_script.R blabla
que parece pasar blabla
correctamente como argumento, pero luego no obtengo el my_script.Rout
archivo de salida con el que obtengo R CMD BATCH
(quiero el .Rout
archivo). Si bien podría redirigir la salida de una llamada a Rscript
un nombre de archivo de mi elección, no obtendría los comandos de entrada R incluidos en el archivo de la forma R CMD BATCH
en que lo hace en el .Rout
archivo.
Entonces, idealmente, busco una manera de pasar argumentos a un script R que se está ejecutando a través del R CMD BATCH
método, aunque estaría contento con un enfoque que use Rscript
si hay una manera de hacer que produzca un .Rout
archivo comparable .
R CMD BATCH
es una reliquia. Sin embargo, lo que me gusta de él es que produce un.Rout
archivo que incluye no solo la salida del script, sino que también intercala los comandos / comentarios de entrada del.R
archivo de script que produjo esa salida.R CMD BATCH
.R CMD BATCH
conknitr
, por ejemploRscript -e "knitr::stitch(commandArgs(TRUE)[1])" my_script.R
(puede reemplazarstitch
constitch_rhtml
ostitch_rmd
, y necesita instalarknitr
desde Github ya que acabo de encontrar un error enstitch
...)Rscript myfile.R > path/to/mylog.Rout
y en lugar de imprimirse en stdout (la pantalla), la salida del archivo se guarda en su.Rout
archivo.Rscript myfile.R | tee mylog.Rout
Después de probar las opciones descritas aquí, encontré esta publicación de Forester en r-bloggers. Creo que es una opción limpia a considerar.
Pongo su código aquí:
Desde la línea de comando
Test.R
En test.out
¡Gracias a Forester !
fuente
--args
es la clave. También funciona conR --no-save --no-restore --args a=1 < test.R
yR --no-save --no-restore < test.R --args a=1
En su script R, llamado
test.R
:Desde la línea de comando, ejecute:
Su archivo de salida, test.Rout, mostrará que el argumento
4
se ha pasado con éxito a R:fuente
Debe poner argumentos antes
my_script.R
y usarlos-
en los argumentos, por ejemplocommandArgs()
recibirá-blabla
como una cadena de caracteres en este caso. Consulte la ayuda para obtener más detalles:fuente
args <- commandArgs(FALSE)
y luego imprimir args, termino con todos los argumentos, incluidos los que no son míos, como--restore
,--save
, etc. Si utilizocommandArgs(TRUE)
consigo ningún argumento en absoluto. ¿Hay alguna manera de obtener mis propios argumentos adicionales?--args
parece prometedor, pero no he podido hacer que funcione ...¡Agrego una respuesta porque creo que una solución de una línea siempre es buena! Encima de su
myRscript.R
archivo, agregue la siguiente línea:Luego envíe su script con algo como:
Por ejemplo:
Luego:
fuente
Aquí hay otra forma de procesar argumentos de línea de comando, usando
R CMD BATCH
. Mi enfoque, que se basa en una respuesta anterior aquí , le permite especificar argumentos en la línea de comando y, en su secuencia de comandos R, dar algunos o todos los valores predeterminados.Aquí hay un archivo R, que llamo test.R :
En la línea de comando, si escribo
luego dentro de R tendremos
a
=2
yb
=c(2,5,6)
. Pero podría, decir, omitirb
y agregar otro argumentoc
:Luego, en R tendremos
a
=2
,b
=c(1,1,1)
(el valor predeterminado) yc
="hello"
.Finalmente, por conveniencia, podemos envolver el código R en una función, siempre que tengamos cuidado con el entorno:
fuente