【问题标题】:Automating the generation of model output in R [closed]在 R 中自动生成模型输出
【发布时间】:2015-10-18 04:11:35
【问题描述】:

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

【问题讨论】:

  • 可能重复:stackoverflow.com/q/2793389/2372064。如果不是,请说明您的情况可能有何不同。
  • 您使用的是 win、mac 还是 unix?如果没有获胜,请查看cron 作为每天运行“某事”的起点。 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”是否足以存在于全局环境中?

标签: r automation rscript


【解决方案1】:

cmets和chat出来的这个问题有一些不具体的情况:

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

【讨论】:

  • 这是一个很棒的答案!再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 2014-06-07
  • 1970-01-01
  • 2020-08-01
  • 2012-11-10
  • 1970-01-01
相关资源
最近更新 更多