【发布时间】:2026-02-23 04:10:02
【问题描述】:
如何创建一组都访问同一个私有变量的 R 函数?
假设我想创建readSetting(key) 和writeSetting(key,value) 函数,它们都在同一个隐藏列表settings 上运行。如果我这样尝试...
local( {
settings <- list()
readSetting <<- function ( key ) settings[[key]]
writeSetting <<- function ( key, value ) settings[[key]] = value
} )
...然后readSetting 和writeSetting 在local 调用之外不可见。如果我想让它们在那里可见,我必须先分配
readSetting <- writeSetting <- NULL
在local 通话之外。必须有更好的方法,因为如果我必须以两种不同的方式说出哪些变量是公共的,我的代码不是 DRY。
(本文的背景是我正在开发一个R包,这段代码将在一个辅助文件中,通过source加载到主文件中。)
这个问题与How to limit the scope of the variables used in a script? 有关,但那里的答案并不能解决我的问题。
【问题讨论】:
-
你可以看看
knitr如何处理它的选项(这似乎类似于base::options)作为一个例子。 -
也许我有点慢,@Gregor,但我看不到连接。
-
这是我能想到的唯一一个具有经常修改的全局选项的包。如果
knitr没有导出opts_chunk,则所有块选项都可能不可见(或多或少)。 -
另外“此代码将位于辅助文件中,通过源代码加载到主文件中” 对我来说听起来不像是好的 R 包实践。我没有开发很多包,所以我可能是错的,但这听起来像它会更好地实现为未导出的数据对象。