2012-07-21 100 views
4

我試圖創建R.一個簡單的參考類下面是我的代碼(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() 

這將產生以下錯誤最後一行,一個$函數printValues:

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

此外,初始化方法沒有被調用?

有人可以指出問題出在哪裏嗎?提前謝謝了。

回答

7

setRefClassmethods參數需要是一個命名列表。問題在於,在定義列表時,您正在使用賦值運算符<-而不是=。見它返回一個名爲列表和

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

這會在您的環境ab,並返回一個不願透露姓名的名單

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

之間的差異。

所以通過你的方法時,你需要使用=

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

卓越的捕獲,非常感謝flodel – Sherlock 2012-07-26 16:49:55