自动生成R中的模型输出

时间:2015-07-27 20:00:31

标签: r automation rscript

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

1 个答案:

答案 0 :(得分:0)

在评论和聊天中出现的这个问题有一些非特定的条件:

1。对象持久性

objModel是一个随时间推移建立的~90MB模型,每次都不需要重建大量数据。

考虑到这一点,您的首要任务是使数据在不同的 R 会话中保持不变。只需使用saveload即可轻松完成此操作。在本届会议上:

save(objModel, func1, func2, file="objModel.Rdata") # assuming a relevant directory

这假设这些是脚本所依赖的环境中唯一的依赖对象。 (它可以使用任意数量的对象,因此根据需要添加。)

您的独立脚本应该类似于以下内容(稍后我会将其称为myscript.R):

# library(...) as necessary
load("objModel.Rdata")
# now have objModel, func1, func2 in your environment

# ...
# do your RODBC magic
# then your regression/prediction magic
# ...

write.csv(newresults, file="output.csv", header=......)

代码的诀窍:

  • 永远不要假设人际互动。
  • 您是否记得保存/加载或重新创建所有需要的变量?很容易忘记脚本所依赖的当前环境中的变量,以及在vanilla Rscript环境中不可用的变量。
  • 绘制任何东西?使用pngpdf或其他内容直接保存到图像文件中。
  • 如果您有重要步骤,请考虑异常处理(tryCatch)。
  • 无论如何,在将结果写入输出文件之前,您应该对结果的有效性进行简单的检查(“断言”),无论您是否覆盖了某些内容。这可能很简单,如if (! is.null(...))if (length(...))

2。自动化

现在,您的实际问题开始发挥作用:如何为每日无人监督的执行实现自动化。在您可以从新的命令窗口成功完成之前,甚至不要查看cron或Windows调度。

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

一旦效果令人满意(您是否检查了输出CSV以确保它看起来正确?),现在才考虑实际自动化它。

3。自动化,这次是真实的。

如果您使用的是unixy操作系统(您从未指定过),请查看cron。也许是这样的事情:

17 04 * * * /usr/bin/Rscript /path/to/myscript.R

将于每天凌晨4:17运行该命令。

如果在Windows上,@ MrFlick的评论是恰当的:stackoverflow.com/q/2793389/2372064