R包内的对象状态

时间:2018-07-21 20:51:57

标签: r r-package

我正在构建一个R包,它可以像这样获取数据。

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

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

因此,我的目标是将此对象包含在包环境中。我该如何以符合Cran的方式实现这一目标?

我花了很多时间looking up environments in advanced r,但似乎不知道如何实现这一目标。

1 个答案:

答案 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创建的环境,其父环境是程序包环境。您可以修改该本地计算机,而不必担心任何人的投诉。