使用不在 Task Scheduler R 环境中的变量

Using Variables that are Not in the Enviornment of the Task Scheduler R

我正在创建一个 Rscript,它将通过 taskscheduleR 包每 30 分钟 运行。但是,有些变量需要每 30 分钟更新一次,有些变量应该每周只更新一次。我希望作为每周计划一部分的变量仍处于全局环境中。例如

#Define a variable x that gets run once per week.
x = 10

#Define a variable y that gets run every thirty minutes. 
y = x*5
print(y)

看来我可能需要 2 个脚本,第一个脚本将数据写入 csv,然后在每 30 分钟 运行s 的脚本中读取它。我想知道是否有一种方法可以在一个脚本上完成所有这些,谢谢。

#script_OnceAweek.R
x = 1:10
write.csv(x, "file.csv")

#script_Every30min.R
k = read.csv("file.csv")
y = k*5

据我所知,无法区分同一文件中某些行的执行时间,因为您为每个文件安排的任务应该是 运行。

但我或许可以使不同文件之间的数据交换更容易一些。

当您只有一个数据对象要在脚本之间交换时:

#script_OnceAweek.R
x = 1:10
saveRDS(x, file = "file.csv")

#script_Every30min.R
k = readRDS("file.csv")
y = k*5

如果您有多个数据对象:

#script_OnceAweek.R
x = 1:10
y = 4:6
save(x, y, file = "file.csv")

#script_Every30min.R
load("file.csv")
k = x
y = k*5

第一个解决方案将保存到 .RDS 文件,第二个将保存到 .Rdata 文件。

这样做的好处是您可以保存所有 R 数据类型并将它们加载为 R 数据类型。这意味着您甚至可以保存诸如数据框列表之类的对象。

当你为此使用 csv 时,它会变得非常复杂。

您可以首先使用 if 语句检查您更新每周 CSV 的时间。您可以使用 file.infoSys.time.

info <- file.info("yourfile") Sys.time() - info$mtime

如果是一周前的,更新它,如果不是,跳过那一步。