如何使用私有变量创建R函数?

时间:2016-09-12 19:55:11

标签: r variables scope private

如何创建一组所有访问相同私有变量的R函数?

假设我想创建readSetting(key)writeSetting(key,value)个函数,它们都在同一个隐藏列表settings上运行。如果我这样试试......

local( {
  settings <- list()
  readSetting <<- function ( key ) settings[[key]]
  writeSetting <<- function ( key, value ) settings[[key]] = value
} )

...然后在readSetting来电之外看不见writeSettinglocal。如果我希望它们在那里可见,我必须先分配

readSetting <- writeSetting <- NULL
local电话之外

。必须有一个更好的方法,因为如果我必须以两种不同的方式说哪些变量是公开的,我的代码就不是DRY。

(这项工作的背景是我正在开发一个R包,这段代码将在一个辅助文件中,通过source加载到主文件中。)

这个问题与How to limit the scope of the variables used in a script?有关,但那里的答案并没有解决我的问题。

1 个答案:

答案 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将无效。