Question

1) I cant figure out where the Error:

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

comes from, if I try to run the folowing code:

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) Is it possible to organize the code in that way that I have to add only one line

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

for the initialize function in class A and the rest comes from the father class Part?

Was it helpful?

Solution

Use named arguments rather than parsing ...; make sure that the default constructor works when invoked with no arugments

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

Only interpret arguments for the class under consideration

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

Simple test cases

Part()
A()
A(var3=list(a=1))
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top