He estado usando R CMD BATCH my_script.Rdesde una terminal para ejecutar un Rscript. 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 blablase blablaconvierte 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 blablaque parece pasar blablacorrectamente como argumento, pero luego no obtengo el my_script.Routarchivo de salida con el que obtengo R CMD BATCH(quiero el .Routarchivo). Si bien podría redirigir la salida de una llamada a Rscriptun nombre de archivo de mi elección, no obtendría los comandos de entrada R incluidos en el archivo de la forma R CMD BATCHen que lo hace en el .Routarchivo.
Entonces, idealmente, busco una manera de pasar argumentos a un script R que se está ejecutando a través del R CMD BATCHmétodo, aunque estaría contento con un enfoque que use Rscriptsi hay una manera de hacer que produzca un .Routarchivo comparable .

R CMD BATCHes una reliquia. Sin embargo, lo que me gusta de él es que produce un.Routarchivo que incluye no solo la salida del script, sino que también intercala los comandos / comentarios de entrada del.Rarchivo de script que produjo esa salida.R CMD BATCH.R CMD BATCHconknitr, por ejemploRscript -e "knitr::stitch(commandArgs(TRUE)[1])" my_script.R(puede reemplazarstitchconstitch_rhtmlostitch_rmd, y necesita instalarknitrdesde Github ya que acabo de encontrar un error enstitch...)Rscript myfile.R > path/to/mylog.Routy en lugar de imprimirse en stdout (la pantalla), la salida del archivo se guarda en su.Routarchivo.Rscript myfile.R | tee mylog.RoutDespué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
--argses la clave. También funciona conR --no-save --no-restore --args a=1 < test.RyR --no-save --no-restore < test.R --args a=1En su script R, llamado
test.R:Desde la línea de comando, ejecute:
Su archivo de salida, test.Rout, mostrará que el argumento
4se ha pasado con éxito a R:fuente
Debe poner argumentos antes
my_script.Ry usarlos-en los argumentos, por ejemplocommandArgs()recibirá-blablacomo 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?--argsparece 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.Rarchivo, 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=2yb=c(2,5,6). Pero podría, decir, omitirby 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