保存和检索R包中的临时文件

时间:2017-12-04 04:04:51

标签: r

如何在R包中保存文件?

换句话说,我的软件包的用户将下载一个远程文本文件,我希望用户下次加载软件包时可以使用该文件。

我目前创建的功能使用tempfile()保存文件。正如它的编写,每次调用函数时都会发生下载,并创建一个新的临时文件。我认为这会带来一个问题 - 如果用户多次运行该函数,/ var文件夹将会因临时文件而变得臃肿。为了解决这个问题,我想检查文件是否已经存在并使用现有版本而不是下载它。不幸的是,tempfile()返回的路径在函数终止时会丢失,因此在下次调用函数时,该路径不可用于检查文件是否存在。

我可以将文件保存在packge' s / data目录中。如何从用户的当前工作目录中找到此目录?

不需要保存在临时文件中。我更感兴趣的是学习如何在我的包中保存数据。

谢谢。

1 个答案:

答案 0 :(得分:2)

您可以使用tempdir(),然后使用固定文件名:

f <- file.path(tempdir(), "mypackage_thefile.csv")
if (file.exists(f)) {
   d <- read.csv(f)
} else {
   # download it and save to f
}

每次会话后删除这些文件(删除tempdir时) 如果数据不是太大,您也可以提供数据包(用R读取它,然后将其保存为带有saveRDS的压缩文件。)。但通常情况下,用户无法将其下载到软件包目录(通常是写保护的)。

要将数据添加到包中,请将其放入data文件夹(使用save创建.RData文件,使用data()进行检索),或者inst/extdata文件夹,以任何适当的格式,用

进行检索
f <- system.file("extdata/filename", package="pkgname")

请参阅writing R extensions manual