【发布时间】:2020-04-19 14:30:37
【问题描述】:
我正在开发一个封装 API 调用的 R 包。为了减少实际调用的数量并加快处理速度,我记住了进行 API 调用的函数。为此,我创建了以下函数,它允许设置缓存目录:
memoise_fromJSON <- function(cache_dir = tempdir()) {
memoise::memoise(jsonlite::fromJSON,
cache = memoise::cache_filesystem(cache_dir))
}
创建我使用的记忆函数
memoised_fromJSON <- memoise_fromJSON()
现在,由于我需要在我的包中多次使用 memoised 函数,我想在包启动时 memoise 函数。我试过了
.onLoad <- function(libname, pkgname) {
memoised_fromJSON <- my_package:::memoise_fromJSON()
}
但我仍然需要运行 memoised_fromJSON <- memoise_fromJSON() 才能让它工作。
所以我的问题是:
- 是否有可能在包启动时记忆函数?
- 如果是这样,我怎样才能以在全局环境中不可见的方式记忆该函数?
我想,这些问题在某种程度上是相关的。我的理解是否正确,我对.onLoad() 的尝试不起作用,因为它在.onLoad() 的环境中创建了记忆功能?
PS:我知道,我无法在包加载时更改cache_dir,但我想设置一个合理的默认值,这样就可以毫不费力地启动。但是,这保留了在需要时更改缓存目录的可能性。
【问题讨论】: