我正在构建一个R包,它可以像这样获取数据。
getdata <- function(uri ="dummyuri.csv"){
httr::GET(url = uri)
}
这是一个昂贵的通话,因此我想在第一次通话后缓存数据。因此,除非您明确声明,否则您将在第一次调用后从程序包环境中获取它的本地副本。
因此,我的目标是将此对象包含在包环境中。我该如何以符合Cran的方式实现这一目标?
我花了很多时间looking up environments in advanced r,但似乎不知道如何实现这一目标。
答案 0 :(得分:1)
在getdata
调用中创建local()
函数,然后将其值写入本地环境。例如,
getdata <- local({
cache <- NULL
cachedURI <- NULL
function(uri ="dummyuri.csv") {
if (is.null(cache) || cachedURI != uri) {
cache <<- httr::GET(url = uri)
cachedURI <<- uri
}
cache
}
})
这会将getdata
的环境设置为由local
创建的环境,其父环境是程序包环境。您可以修改该本地计算机,而不必担心任何人的投诉。