2

我收到以下错误,我认为这是因为解释器认为我调用了该函数.self$getFields

a<-A$new(var1=list(B$new(var1="a"),B$new(var1="b")))
a$test()
[1] Error in getFields(l, c("var1")) : unused argument (c("var1"))



  AB.getFields<-function(keys){
  vars<-mget(names(.refClassDef@fieldClasses), envir = attr(.self, ".xData"))
  return(vars[keys])
}

B<-setRefClass(Class = "B"
              ,fields = list(var1 = "character")
              ,methods = list(getFields=AB.getFields
                               ,initialize=function(...) {
                                   usingMethods("getFields")
                                   callSuper(...)
                                 }
                               )
)

A<-setRefClass(Class = "A"
              ,fields = list(var1 = "list")
              ,methods = list(getFields=AB.getFields,
                              test=function() {
                                  getFields(.self$var1,c("var1"))
                                 }))

setGeneric("getFields", function(object, ...) standardGeneric("getFields"))
setMethod(getFields, "list", function(object, ...) lapply(object,function(e,...) e$getFields(...)))
4

1 回答 1

1

好的,正如您所怀疑的,问题是 Ref 类方法的名称和泛型函数的名称之间的冲突名称。

例如,这解决了问题(在控制台中,可能不在包中):

A<-setRefClass(Class = "A"
               ,fields = list(var1 = "list")
               ,methods = list(getFields=AB.getFields,
                               test=function() {
                                 fx <- get('getFields', 1)
                                 fx(.self$var1,c("var1"))
                               }
              )
)

在我看来,最好的方法是用不同的方式命名你的 ref 类方法。例如get_fields。

于 2013-09-18T09:58:43.863 回答