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

How to create R functions with private variables?

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

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

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

...然后 readSettingwriteSettinglocal 调用之外不可见。如果我想让它们在那里可见,我必须先分配

readSetting <- writeSetting <- NULL

local 调用之外。必须有更好的方法,因为如果我不得不以两种不同的方式说哪些变量是 public.

,我的代码就不是 DRY

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

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

您可以使用 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 将不起作用。