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