r语言 - 更新嵌入式数据,例如sysdata.rda



我最近提交给CRAN的文件被退回了,因为我有分配给全局环境的任务,这是现在不赞成的。

我有一个嵌入式数据集(sysdata.rda),其中包含基于用户所在州(如美国)的配置参数。我希望这个嵌入的数据集是可更新的,当一个新用户使用该程序。我之前在用户使用的初始函数中更新了该数据,并使用户可以通过全局赋值访问它。

我正在努力弄清楚如何更新这个嵌入的数据,并使其成为用户在会话的其余部分使用的默认数据。

以前我将数据放在/data中,最近将其切换到/R/sysdata。Rda,因为它看起来更适合那个地区。现在我不那么确定了。

任何帮助都非常感谢

关键是要在全局环境以外的环境中执行赋值。有两种基本技术,使用local()<<-或显式创建新环境:

使用显式环境很简单:创建环境,然后像列表一样赋值给它:

my_opts <- new.env(parent = emptyenv())
set_state <- function(value) my_opts$state <- value
get_state <- function() my_opts$state

使用local()稍微复杂一些,并且需要使用<<-的一些技巧

set_state <- NULL
get_state <- NULL
local({
  state <- NULL
  get_state <<- function() state
  set_state <<- function(value) state <<- value
})

有关<<-工作原理的更多信息,请参阅https://github.com/hadley/devtools/wiki/environments,在"赋值:将名称绑定到值"一节。

为什么不在/data中有一个foo.R文件,当用户调用data(foo)时加载数据并更新它?这是/data允许的选项之一,但请注意写R扩展

中的以下内容

注意R代码应该是"自给自足的",而不是使用包提供的额外功能,这样数据文件也可以在不加载包的情况下使用。

如果你能接受这个限制,那么data(foo)可以加载数据,更新它,并确保它在一个特定的命名对象中,然后你在你的函数中引用它。

相关内容

最新更新