安排R脚本


113

我编写了一个R脚本,该脚本从数据库中提取一些数据,对该数据库执行一些操作,然后将输出发布到新数据库中。

我希望该脚本每天在特定时间运行,但是我找不到有效地执行此操作的任何方法。

谁能推荐我可以用来解决这个问题的资源?我正在Windows计算机上运行此脚本。

Answers:


107

实际上,在Windows下,您甚至不必先创建批处理文件即可使用Scheduler

  • 打开调度程序:开始->所有程序->附件->系统工具->调度程序
  • 创建一个新任务
  • 在[动作]标签下,建立新动作
  • 选择开始程序
  • 浏览到应放置在此处的Rscript.exe,例如:
    “ C:\ Program Files \ R \ R-3.0.2 \ bin \ x64 \ Rscript.exe”
  • 参数字段中输入文件名
  • 开始位置字段中输入要在其中找到脚本的路径
  • 转到触发器选项卡
  • 创建新的触发器
  • 选择该任务应每天,每月,...重复几次,或您喜欢的任何事情来完成

3
是的,谢谢!这是对我有用的方法,而不是上面的方法,也不是网上其他各种答案。我只会添加确保文件扩展名是.Rand NOT .r
esa606 2014年

您的确切含义是什么-您期望发生什么?也许这应该成为一个问题(也许已经有关于SO的答案)。
petermeissner'7

1
有没有办法将dos窗口最小化?
乔治·唐塔斯

58

假设您的R脚本mytest.r位于中的D:\mydocuments\,您可以创建一个包含以下命令的批处理文件:

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

然后将其作为新任务添加到Windows任务计划程序中,在此处设置触发条件。

您也可以省略批处理文件。在任务计划程序C:\R\R-2.10.1\bin\Rcmd.exeprogram/script文本框中设置,并提供Arguments其余的初始命令:BATCH D:\mydocuments\mytest.r

通过Windows Task Scheduler调度R任务(发布于2015年2月11日)

taskcheduleR:R包,用于通过Windows任务管理器计划R脚本(发布于2016年3月17日)

编辑

我最近再次采用了批处理文件,因为我希望将cmd窗口最小化(我找不到其他方法)。

具体来说,我Actions按如下所示填充Windows Task Scheduler 选项卡:

Program/script:

命令文件

Add arguments (optional):

/ c开始/ min D:\ mydocuments \ mytest.bat ^&退出

mytest.bat的内容

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


16
使用Rscript优于R BATCH。可以区分大小写的系统也会得到r
德克·埃德比布特

谢谢,我没用过。如我所见,参数也可以传递到脚本并使用commandArgs进行访问
George Dontas,2010年

5

现在,RStudio中有一个内置选项可以执行此操作,以在程序包下面首先运行调度程序

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

安装后转到

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

在此处输入图片说明


这对我不起作用。当我尝试运行Addin时,出现以下错误:加载所需的名称空间:Shiny失败,错误:'矩阵的列数必须匹配(请参见arg 2)'加载所需的名称空间:miniUI失败,错误:'列数的矩阵必须匹配(请参见arg 2)'rbind(info,getNamespaceInfo(env,“ S3methods”))中的错误:矩阵的列数必须匹配(请参见arg 2)
obewanjacobi

刚刚更新了data.table尝试修复此错误,现在我得到以下信息:错误:加载名称空间“ data.table”时找不到对象“ as.xts”
obewanjacobi

1
RStudio是否需要保持开放状态才能正常工作?
cgage1

1
我认为如果R studio关闭,它将自动打开它并运行脚本。
Zeeshan



2

设置任务计划程序

步骤1)打开任务计划程序(开始>搜索任务计划程序)

步骤2)点击“操作”>“创建任务”

步骤3)选择“仅在用户登录时运行”,取消选中“以最高权限运行”,为您的任务命名,配置为“ Windows Vista / Windows Server 2008”

在此处输入图片说明

步骤4)在“触发器”标签下,设置您希望脚本运行的时间

步骤5)在“操作”标签下,放置Rscript.exe文件的完整位置,即

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

使用with -esource()in来包装脚本名称,如下所示:

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

在此处输入图片说明

对任务计划程序中计划的Rscript进行故障排除

使用任务计划程序运行脚本时,很难解决任何问题,因为您不会收到任何错误消息。

这可以通过使用sink()R中的函数来解决,该函数将允许您将所有错误消息输出到您指定的文件中。这是您可以执行的操作:

# 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

})

为了使Rscript正常工作,您还需要更改的另一件事是在脚本中指定所有文件路径的完整文件路径。

这在任务计划程序中将不起作用:

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

您将需要指定要在Rscript中采购的所有脚本的完整文件路径:

source("C:/location_of_my_script/functions/import_function.R")

1

完成这些步骤的组合后,您会收到 "Argument Batch Ignored"后,R.exe运行后错误消息,请尝试此操作,它对我有用。

在Windows Task Scheduler中:

BATCH "C:\Users\desktop\yourscript.R"在参数字段中替换

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


1
作为对Mark Byers答案的评论(或对该答案的修改),这是有道理的,我认为它不能单独存在。
格雷戈尔·托马斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.