事先不知道变量名时访问 R6 class 变量?

Accessing R6 class variable when variable name is not known advance?

这是一个简单的代码,它说明了我想要实现的目标:

require(R6)
cTest <- R6Class(
  "CTest", 
  public = list(
    a = 10, b=20, c=30,
    printX = function(x) {
      print(self[x])
    }
  )
) #"CTest"

myClass <- cTest$new(); 
for (x in c("a","b", "c"))
   myClass$printX("a")

而且它不起作用。错误信息:

"Error in self[x] : object of type 'environment' is not subsettable"

为了比较,lists/data.frames 的类似任务有效:

for (x in c("mpg","cyl", "hp"))
   print(mtcars[x])

你能帮忙吗?

如果您使用双括号索引(即 print(self[[x]])),这似乎工作正常。问题在于,通常单括号索引试图提取原始对象的 子集 ;相反,双括号索引提取原始对象的 元素 。例如,如果 L 是一个数字列表,L[x] 是一个子列表,而 L[[x]] 是一个数字。来自推特上的 Hadley Wickham: