Programación de script R

113

He escrito un script R que extrae algunos datos de una base de datos, realiza varias operaciones en él y publica el resultado en una nueva base de datos.

Me gustaría que este script se ejecutara todos los días a una hora específica, pero no puedo encontrar ninguna forma de hacerlo de manera efectiva.

¿Alguien puede recomendar un recurso que pueda consultar para resolver este problema? Estoy ejecutando este script en una máquina con Windows.

ETD
fuente

Respuestas:

108

En realidad, en Windows, ni siquiera tiene que crear un archivo por lotes primero para usar el Programador .

  • Abra el programador: INICIO -> Todos los programas -> Accesorios -> Herramientas del sistema -> Programador
  • Crear una nueva tarea
  • en la pestaña Acción, crea una nueva acción
  • elija Iniciar programa
  • busque Rscript.exe que debe colocarse, por ejemplo, aquí:
    "C: \ Archivos de programa \ R \ R-3.0.2 \ bin \ x64 \ Rscript.exe"
  • ingrese el nombre de su archivo en el campo de parámetros
  • ingrese la ruta donde se encuentra el script en el campo Comenzar en
  • vaya a la pestaña Activadores
  • crear un nuevo disparador
  • elige que tarea se debe hacer cada día , mes, ... repetida varias veces, o lo que quieras
Petermeissner
fuente
3
¡Si, gracias! Esto es lo que funcionó para mí, no lo anterior y no las otras respuestas que flotan en la web. Solo agregaría que asegúrese de que la extensión del archivo sea .Ry NO .r.
esa606
¿Qué quieres decir exactamente con eso? ¿Qué esperarías que sucediera? Tal vez esto debería plantearse una pregunta propia (tal vez ya haya una respuesta en SO).
petermeissner
1
¿Hay alguna forma de minimizar la ventana DOS?
George Dontas
58

Suponiendo que su script R está mytest.rubicado en D:\mydocuments\, puede crear un archivo por lotes que incluya el siguiente comando:

C:\R\R-2.10.1\bin\Rcmd.exe BATCH D:\mydocuments\mytest.r

Luego agréguelo, como una nueva tarea, al programador de tareas de Windows, estableciendo allí las condiciones de activación.

También puede omitir el archivo por lotes. Establezca C:\R\R-2.10.1\bin\Rcmd.exeen el program/scriptcuadro de texto en el programador de tareas y proporcione Argumentsel resto del comando inicial:BATCH D:\mydocuments\mytest.r

Programación de tareas de R a través del programador de tareas de Windows (publicado el 11 de febrero de 2015)

taskscheduleR: paquete R para programar scripts R con el administrador de tareas de Windows (publicado el 17 de marzo de 2016)

EDITAR

Recientemente adopté nuevamente el uso de archivos por lotes, porque quería que la ventana de cmd se minimizara (no pude encontrar otra manera).

Específicamente, lleno la Actionspestaña del programador de tareas de Windows de la siguiente manera:

Program/script:

cmd.exe

Add arguments (optional):

/ c inicio / min D: \ mydocuments \ mytest.bat ^ & salir

Contenido de mytest.bat :

C: \ R \ R-3.5.2 \ bin \ x64 \ Rscript.exe D: \ mydocuments \ mytest.r params

George Dontas
fuente
16
RscriptEs preferible usar R BATCH. Los sistemas que pueden diferenciar entre minúsculas y mayúsculas también obtienen r.
Dirk Eddelbuettel
Gracias, no lo había usado. Como vi, los argumentos también se pueden pasar al script y se puede acceder a ellos usando commandArgs
George Dontas
5

Ahora hay una opción incorporada en RStudio para hacer esto, para ejecutar el programador primero instale los siguientes paquetes

  install.packages('data.table')
  install.packages('knitr')
  install.packages('miniUI')
  install.packages('shiny')
  install.packages("taskscheduleR", repos = "http://www.datatailor.be/rcube", type = 
  "source")

Después de la instalación, vaya a

**TOOLS -> ADDINS ->BROWSE ADDINS ->taskscheduleR -> Select it and execute it.**

ingrese la descripción de la imagen aquí

Zeeshan
fuente
Esto no me funciona. Cuando intento ejecutar el complemento, obtengo los siguientes errores: Cargando espacio de nombres requerido: brillante Error con error: 'número de columnas de matrices debe coincidir (ver arg 2)' Cargando espacio de nombres requerido: miniUI Falló con error: 'número de columnas de matrices debe coincidir (ver arg 2) 'Error en rbind (info, getNamespaceInfo (env, "S3methods")): el número de columnas de matrices debe coincidir (ver arg 2)
obewanjacobi
Acabo de actualizar data.table para intentar corregir este error, y ahora aparece lo siguiente: Error: no se encontró el objeto 'as.xts' mientras se cargaba el espacio de nombres 'data.table'
obewanjacobi
1
¿RStudio debe permanecer abierto para que funcionen?
cgage1
1
Creo que si R studio está cerrado, lo abrirá automáticamente y ejecutará el script.
Zeeshan
4

Configuré mis tareas a través del SCHTASKSprograma. Para ejecutar scripts en el inicio, escribiría algo como

SCHTASKS /Create /SC ONSTART /TN MyProgram /TR "R CMD BATCH --vanilla d:\path\to\script.R"

Consulte este sitio web para obtener más detalles sobre SCHTASKS. Más detalles en el sitio web de Microsoft .

Roman Luštrik
fuente
2

Configurar el programador de tareas

Paso 1) Abra el programador de tareas (Inicio> buscar Programador de tareas)

Paso 2) Haga clic en "Acción"> "Crear tarea"

Paso 3) Seleccione "Ejecutar solo cuando el usuario haya iniciado sesión", desmarque "Ejecutar con los más altos privilegios", asigne un nombre a su tarea, configure para "Windows Vista / Windows Server 2008"

ingrese la descripción de la imagen aquí

Paso 4) En la pestaña "Activadores", establezca cuándo desea que se ejecute el script

Paso 5) En la pestaña "Acciones", coloque la ubicación completa del archivo Rscript.exe, es decir

"C:\Program Files\R\R-3.6.2\bin\Rscript.exe" (include the quotes)

Ponga el nombre de su script con -ey source()en argumentos envolviéndolo así:

-e "source('C:/location_of_my_script/test.R')"

ingrese la descripción de la imagen aquí

Solución de problemas de un Rscript programado en el Programador de tareas

Cuando ejecuta un script con el Programador de tareas, es difícil solucionar cualquier problema porque no recibe ningún mensaje de error.

Esto se puede resolver usando la sink()función en R que le permitirá enviar todos los mensajes de error a un archivo que usted especifique. Así es como puede hacer esto:

# Set up error log ------------------------------------------------------------
error_log <- file("C:/location_of_my_script/error_log.Rout", open="wt")
sink(error_log, type="message")

try({

# insert your code here

})

La otra cosa que tendrá que cambiar para que su Rscript funcione es especificar la ruta de archivo completa de cualquier ruta de archivo en su secuencia de comandos.

Esto no funcionará en el programador de tareas:

source("./functions/import_function.R")

Deberá especificar la ruta completa del archivo de cualquier script que esté obteniendo dentro de su Rscript:

source("C:/location_of_my_script/functions/import_function.R")
ben.watson.ca
fuente
1

Después de seguir cualquier combinación de estos pasos y recibe el "Argument Batch Ignored"error después de que se ejecuta R.exe, intente esto, funcionó para mí.

En el Programador de tareas de Windows:

Reemplazar BATCH "C:\Users\desktop\yourscript.R"en el campo de argumentos

con

CMD BATCH --vanilla --slave "C:\Users\desktop\yourscript.R"

Starbucks
fuente
1
Esto tendría sentido como un comentario sobre la respuesta de Mark Byers (o tal vez una edición de esa respuesta), no creo que pueda ser independiente.
Gregor Thomas