0

1) エラーの場所がわかりません:

Error in args[[1]] : subscript out of bounds

次のコードを実行しようとすると、次のようになります。

Part.initialize<-function(...){
  args<-list(...)

    .self$var1 <- if(is.null(args[["var1"]])) vector() else args[["var1"]]
    .self$var2 <- if(is.null(args[["var2"]])) character() else as.character(args[["var2"]])
    .self
}

Part<-setRefClass(Class = "Part"
                 ,fields = c(var1 = "ANY", var2 = "character")
                 ,methods = list(initialize=Part.initialize))

A.initialize<-function(...){
  args<-list(...)

  .self$var1 <- if(is.null(args[["var1"]])) vector() else args[["var1"]]
  .self$var2 <- if(is.null(args[["var2"]])) character() else as.character(args[["var2"]])
  .self$var3 <- if(is.null(args[["var3"]])) list() else as.list(args[["var3"]])
  .self  
}

A<-setRefClass(Class = "A"
              ,contains = "Part"
              ,fields = list(var3 = "list")
              ,methods = list(initialize=A.initialize))

2) 1 行だけ追加する必要があるようにコードを整理することは可能ですか?

.self$var3 <- if(is.null(args[["var3"]])) list() else as.list(args[["var3"]])

クラス A の初期化関数の場合、残りは親クラスの Part? から取得されます。

4

1 に答える 1

1

解析するのではなく、名前付き引数を使用します...。引数なしで呼び出されたときにデフォルトのコンストラクターが機能することを確認してください

Part.initialize<-function(..., var1=vector(), var2=character()){
    callSuper(..., var1=var1, var2=as.character(var2))
}

Part<-setRefClass(Class = "Part"
                 ,fields = c(var1 = "ANY", var2 = "character")
                 ,methods = list(initialize=Part.initialize))

検討中のクラスの引数のみを解釈する

A.initialize<-function(..., var3=list()){
    callSuper(..., var3=as.list(var3))
}

A<-setRefClass(Class = "A"
               ,contains = "Part"
               ,fields = list(var3 = "list")
               ,methods = list(initialize=A.initialize))

簡単なテストケース

Part()
A()
A(var3=list(a=1))
于 2013-09-21T12:46:22.547 に答える