如何创建一组所有访问相同私有变量的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?有关,但那里的答案并没有解决我的问题。
答案 0 :(得分:1)
您可以使用R6Class包和以下非常粗略的代码模拟类似的东西:
Privates <- R6Class("Privates",
public=list(
readSetting = function(key) {
private$settings[[key]]
},
writeSetting = function(key,value) {
private$settings[[key]] <<- value
}
),
private=list(
settings = list()
)
)
a <- Privates$new()
a$writeSetting("a",4)
a$readSetting("a")
直接阅读o设置a$setting
将无效。