在R中自动生成模型输出

在R中自动生成模型输出,r,automation,rscript,R,Automation,Rscript,我有一个R命令列表,它首先通过RODBC从SQL数据库获取数据,计算计算字段,然后将回归模型(在我的R环境中指定为“objModel”)应用于数据。最终输出是一个csv文件,包含两列(联系人ID、概率分数)。如何使用Rscript每天自动运行脚本和检索新的csv文件?R必须一直运行吗? 我在Windows环境下工作。我对Rscript没有任何经验。非常感谢您回答中的任何额外细节 在评论和聊天中,这个问题出现了一些不具体的情况: 1.对象持久性 objModel是一个随时间推移而构建的~90MB模

我有一个R命令列表,它首先通过RODBC从SQL数据库获取数据,计算计算字段,然后将回归模型(在我的R环境中指定为“objModel”)应用于数据。最终输出是一个csv文件,包含两列(联系人ID、概率分数)。如何使用Rscript每天自动运行脚本和检索新的csv文件?R必须一直运行吗?
我在Windows环境下工作。我对Rscript没有任何经验。非常感谢您回答中的任何额外细节

在评论和聊天中,这个问题出现了一些不具体的情况:

1.对象持久性
objModel
是一个随时间推移而构建的~90MB模型,其中包含大量数据,无需每次重建

记住这一点,您的第一个任务是使数据在不同的R会话中持久化。只需使用
保存
加载
即可轻松实现。在本届会议上:

save(objModel, func1, func2, file="objModel.Rdata") # assuming a relevant directory
这假定这些是脚本所依赖的环境中唯一的依赖对象。(它可以接受任意数量的对象,因此可以根据需要添加。)

然后,您的独立脚本应该如下所示(稍后我将称之为
myscript.R
):

代码的技巧:

  • 永远不要假设人与人之间的互动
  • 您是否记得保存/加载或重新创建所有需要的变量?很容易忘记脚本所依赖的当前环境中的变量,而这些变量在普通Rscript环境中是不可用的
  • 有什么阴谋吗?使用
    png
    pdf
    或其他方法直接保存到图像文件
  • 如果您有重要步骤,请考虑异常处理(
    tryCatch
  • 无论如何,在将结果写入输出文件之前,应该对结果的有效性进行简单的检查(“断言”),无论您是否写得太多。这可能很简单,如
    if(!is.null(…)
    if(length(…)
2.自动化 现在,你真正的问题来了:如何在日常无监督的情况下自动执行。在通过新的命令窗口成功完成之前,不要查看cron或windows调度

也就是说,您能否运行
Rscript/path/to/myscript.R
并使其成功运行?您可能需要使用
setwd(…)
强制当前工作目录,或者在
load
write.csv
函数调用中使用绝对路径名。我倾向于假设调度器将从不同的目录运行东西,所以我以一种或另一种方式强制它

一旦它工作得令人满意(你检查输出CSV以确保它看起来正确吗?),现在才应该考虑实际自动化它。

3.自动化,这一次是真的。 如果您使用的是unixy操作系统(您从未指定),请查看。也许是这样的:

17 04 * * * /usr/bin/Rscript /path/to/myscript.R
它将在每天早上4:17运行命令


如果在windows上,@MrFlick的评论是合适的:。

可能重复:。如果不是,请说明您的情况可能会有什么不同。您是使用win、mac还是unix?如果你没有赢,那么就把它作为每天跑步的起点。Rscript的使用相对简单:如果您的脚本文件名为“daily sql.R”,那么您应该安排
Rscript daily sql.R
,确保您的R脚本充分处理路径(以及文件的过度写入)和异常。@r2evans谢谢。当代码在我的R环境中使用“objModel”时,R的实例是否应该继续运行?我想你误解了:这意味着cron在每天的某个时间启动一个Rscript实例。Rscript运行您的脚本,该脚本加载/提取它需要的所有数据,进行处理,然后将CSV输出转储(到某处)。之后,Rscript退出。不需要也不需要持久的过程。@MrFlick的链接有帮助吗?你是在windows上运行这个吗?@r2evans我是在windows上运行这个。我可能没有正确地理解它,因为我担心脚本不包含创建变量“objModel”的代码。变量“objmodel”是通过训练一个大数据集创建的,它花费了很多时间。现在它驻留在我的全局环境中。我的目标是使用更小的数据集和这个“objModel”输出新的输出。当Rscript运行时,它是否需要知道“objModel”是如何创建的,或者“objModel”在全局环境中存在是否足够?这是一个非常棒的答案!再次感谢。
17 04 * * * /usr/bin/Rscript /path/to/myscript.R