我有一个R命令列表,它首先通过RODBC从SQL数据库中获取数据,计算计算字段,然后将回归模型(在我的R环境中指定为“objModel”)应用于数据。最终输出是一个包含两列(联系人ID,Probability_Score)的csv文件。如何使用Rscript自动运行脚本并每天检索新的csv文件? R必须一直运行吗? 我在Windows环境中工作。我对Rscript没有任何经验。您的答案中的任何额外细节都非常感谢。
答案 0 :(得分:0)
在评论和聊天中出现的这个问题有一些非特定的条件:
objModel
是一个随时间推移建立的~90MB模型,每次都不需要重建大量数据。
考虑到这一点,您的首要任务是使数据在不同的 R 会话中保持不变。只需使用save
和load
即可轻松完成此操作。在本届会议上:
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=......)
代码的诀窍:
png
,pdf
或其他内容直接保存到图像文件中。tryCatch
)。if (! is.null(...))
或if (length(...))
。现在,您的实际问题开始发挥作用:如何为每日无人监督的执行实现自动化。在您可以从新的命令窗口成功完成之前,甚至不要查看cron或Windows调度。
也就是说,您可以运行Rscript /path/to/myscript.R
并让它成功运行吗?您可能需要使用setwd(...)
强制执行当前工作目录,或者在load
和write.csv
函数调用中使用绝对路径名。我倾向于假设调度程序将从不同的目录运行,所以我强制它以一种方式或其他方式。
一旦效果令人满意(您是否检查了输出CSV以确保它看起来正确?),现在才考虑实际自动化它。
如果您使用的是unixy操作系统(您从未指定过),请查看cron。也许是这样的事情:
17 04 * * * /usr/bin/Rscript /path/to/myscript.R
将于每天凌晨4:17运行该命令。
如果在Windows上,@ MrFlick的评论是恰当的:stackoverflow.com/q/2793389/2372064。