2

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

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])

你能帮我吗?

4

1 回答 1

2

如果您使用双括号索引(即print(self[[x]])),这似乎可以正常工作。问题是通常单括号索引试图提取原始对象的子集。相反,双括号索引提取原始对象的元素。例如,ifL是一个数字列表,L[x]是一个子列表,whileL[[x]]是一个数字。来自推特上的哈德利·威克姆:

在此处输入图像描述

于 2017-08-02T11:45:40.730 回答