在 R 中自动生成模型输出

Automating the generation of model output in R

我有一个 R 命令列表,首先通过 RODBC 从 SQL 数据库中获取数据,计算计算字段,然后将回归模型(在我的 R 环境中指定为 "objModel")应用于数据。最终输出是一个包含两列(联系人 ID,Probability_Score)的 csv 文件。我如何使用 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=......)

代码技巧:

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

2。自动化

现在,您的实际问题来了:如何在日常无监督执行中自动执行此操作。在您可以通过新命令 window.

成功完成之前,甚至不要查看 cron 或 windows 计划

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

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

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

如果您使用的是 unixy OS(您从未指定),请查看 cron。也许是这样的:

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

这将 运行 该命令每天在 4:17am。

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