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