Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R包内的对象状态_R_R Package - Fatal编程技术网

R包内的对象状态

R包内的对象状态,r,r-package,R,R Package,我正在构建一个R包,它可以获得这样的数据 getdata <- function(uri ="dummyuri.csv"){ httr::GET(url = uri) } getdata在local()调用中创建getdata函数,并让它将值写入本地环境。比如说, getdata <- local({ cache <- NULL cachedURI <- NULL function(uri ="dummyuri.csv") { if (is.nu

我正在构建一个R包,它可以获得这样的数据

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

getdata在
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将最后一个调用作为一个不可见的变量存储在全局环境中,这显然是合法的,但作为一个用户,我觉得不太理想。更改包的环境可能是不可能的,不过您可以使用tempfile,将路径作为环境变量存储在
选项中。我认为用看不见的变量污染全球环境是不可能的。。。如果取消附加,则程序包可能不会删除所述变量。这可能很幼稚,但我认为封装是包的关键;我想,您可以指定使用
.onUnload
删除它。谢谢,我会看一看。我仍然认为这通常是危险的,因为它需要包成功卸载,并且作者要跟踪全局环境中的所有对象。哦!这里有一个更好的方法: