【问题标题】:Accessing R6 class variable when variable name is not known advance?在不知道变量名的情况下访问 R6 类变量?
【发布时间】:2017-07-31 16:41:58
【问题描述】:

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

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

你能帮忙吗?

【问题讨论】:

    标签: r class r6


    【解决方案1】:

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

    【讨论】:

    • 我澄清了这个问题 - 这是关于通过编写与数据无关的代码的良好编程实践,您永远不会对变量名称进行硬编码(这样您就可以在循环或函数中使用您的代码)。请运行问题的第一个代码sn-p(它会产生错误),然后是第二个sn-p,(它工作正常)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 2020-01-21
    • 2017-06-10
    相关资源
    最近更新 更多