【问题标题】:R Reference Class issueR参考类问题
【发布时间】:2012-07-21 22:09:58
【问题描述】:

我正在尝试在 R 中创建一个简单的参考类。这是我的代码(R 初学者):

MyClass <- setRefClass("MyClass",
                       fields = list(a = "numeric",
                                     b = "numeric"),

                       methods = list(
                         initialize <- function(){
                           print("Initializing")
                           a <<- 1
                           b <<- 2
                         },

                         printValues <- function(){
                           print(a)
                           print(b)
                         }
                         )
                       )

a <- MyClass$new()
a$printValues()

这会为最后一行 a$printValues 产生以下错误:

Error in envRefInferField(x, what, getClass(class(x)), selfEnv) : 
  "printValues" is not a valid field or method name for reference class “MyClass”

另外,初始化方法没有被调用?

有人可以指出问题出在哪里吗?非常感谢。

【问题讨论】:

    标签: r oop reference-class


    【解决方案1】:

    setRefClassmethods 参数需要是一个命名列表。问题是您在定义列表时使用了分配运算符&lt;- 而不是=。看看两者的区别

    list(a = 1, b = 2)
    # $a
    # [1] 1
    # 
    # $b
    # [1] 2
    

    返回一个命名列表和

    list(a <- 1, b <- 2)
    # [[1]]
    # [1] 1
    # 
    # [[2]]
    # [1] 2
    

    在您的环境中创建 ab 并返回一个未命名的列表。

    所以在传递你的方法时,你需要使用=:

    methods = list(initialize = function [...],
                   printValues = function [...]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多