R包中的对象状态

Object State inside of R package

我正在构建一个像这样获取数据的 R 包。

getdata <- function(uri ="dummyuri.csv"){
  httr::GET(url = uri)
}

这是一个昂贵的调用,所以我想在第一次调用后缓存数据。因此,除非您明确声明,否则您会在第一次调用后从包环境中获取它的本地副本。

所以我的目标是将这个对象包含在包环境中。我将如何以符合 cran 的方式实现这一目标?

我花了很多时间 looking up environments in advanced r 但似乎无法理解如何实现这一目标。

local() 调用中创建您的 getdata 函数,并将值写入本地环境。例如,

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 创建的环境,其父级是包环境。你可以修改那个本地的而不用担心任何人的投诉。