在R中自动生成模型输出



我有一个R命令列表,首先通过RODBC从SQL数据库中获取数据,计算计算字段,然后将回归模型(在我的R环境中分配为"objModel")应用于数据。最后的输出是一个csv文件,包含两列(Contact id, Probability_Score)。我如何使用Rscript来自动化运行脚本和每天检索新csv文件的过程?R必须一直运行吗?我在Windows环境下工作。我对Rscript没有任何经验。如果您的回答中有任何额外的细节,我们将不胜感激。

这个问题在评论和聊天中出现了一些不明确的条件:

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=......)

代码的窍门:

  • 永远不要假设人类互动。
  • 你记得保存/加载或重新创建所有需要的变量吗?在当前环境中很容易忘记脚本所依赖的变量,而该变量在普通Rscript环境中不可用。
  • 策划什么?使用png, pdf,或其他直接保存到图像文件。
  • 考虑异常处理(tryCatch)如果你有重要的步骤。
  • 无论如何,在将结果写入输出文件之前,无论是否覆盖某些内容,都应该对结果的有效性进行简单检查("断言")。可以是简单的if (! is.null(...))if (length(...))

2。自动化

现在,你的实际问题来了:如何在日常无监督执行中自动执行此操作。在你能从一个新的命令窗口成功地执行cron或windows调度之前,甚至不要看它。

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

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

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

如果您使用的是unix操作系统(您从未指定),请查看cron。比如:

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

,它将在每天凌晨4:17运行命令。

如果在windows上,@MrFlick的评论是合适的:stackoverflow.com/q/2793389/2372064.

最新更新