7

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”

また、初期化メソッドが呼び出されていませんか?

誰かが問題がここにある場所を教えてもらえますか? よろしくお願いします。

4

1 に答える 1

10

へのmethods引数はsetRefClass、名前付きリストである必要があります。問題は、リストを定義するときに代入演算子を使用していることです<-=の違いを参照してください

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

名前付きリストを返し、

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

a環境内にとを作成しb、名前のないリストを返します。

したがって、メソッドを渡すときは、次を使用する必要があります=

methods = list(initialize = function [...],
               printValues = function [...]
于 2012-07-21T22:33:46.860 に答える