R if / else,用于加载RData或运行代码

时间:2019-01-22 11:33:45

标签: r

我有兴趣在R中找到策略来运行一些代码以生成必要的输出,然后保存,或者如果RData文件存在,则加载它而不是运行代码。

通过示例:

if(!file.exists("saved.RData"){       
    savethis <- c(1,2,3,4)
    save(savethis, file="saved.RData")
}
if(file.exists("saved.RData"){
    load("saved.RData")
}

任何想法都值得赞赏,我环顾四周,但对此没有太多了解。我也对使用哪种保存策略感兴趣,通常将多个对象保存到一个文件中。RData,当然是正确命名的!

1 个答案:

答案 0 :(得分:0)

为此考虑使用make。它是仅在需要构建时才构建的标准工具。它甚至可以检查所构建的.RData的前体是否已更改,然后即使存在也可以对其进行重建。

首先,您需要安装make;如果您使用的是Linux,则可能已经存在。在Windows上,如果您安装Rtools,将会得到它。

在您的工作目录中,您将有两个Rscripts,将其命名为foo.R(用于创建数据集)和plot.R(用于生成绘图和Makefile)(文件名为“ Makefile”)。 Makefile可能如下所示:

all: plot.pdf

my_data.Rda:foo.R
    Rscript foo.R

plot.pdf:my_data.Rda
    Rscript plot.R

clean:
    rm -f my_data.Rda
    rm -f plot.pdf

“ foo.R”可能看起来像这样:

df <- cars
save(df, file = "my_data.Rda")

和“ plot.R”可能看起来像这样:

load("my_data.Rda")

pdf("plot.pdf")
plot(df)
dev.off()

在Makefile中,您定义了许多规则。首先是“全部”规则,该规则告诉软件默认情况下该做什么,然后是要构建的项目的每个部分及其所依赖的规则。在上面的代码中,我们有一个构建“ plot.pdf”的规则,它依赖于“ my_data.Rda”,因此,如果“ plot.pdf”不存在,它将仅运行您的“ plot.R”脚本。 my_data.Rda也必须存在,如果不存在,则将首先生成。在一个目录中安装并生成这三个文件后,可以尝试以下方法。从终端运行以下命令:

make

这将构建“ my_data.Rda”,然后构建“ plot.pdf”。现在删除“ plot.pdf”文件

rm plot.pdf

然后再次运行Make:

make

请注意,Make不需要重建my_data.Rda文件,因此不需要重建。现在删除两个文件,然后重试或运行:

make clean

这是一条规则,它只会使您回到干净的状态重新开始。如果您使用的是Rstudio,则在buildtools菜单中甚至可以选择使用Makefile构建项目。