外部包的引用类继承

时间:2014-07-30 14:37:56

标签: r dplyr reference-class

我试图覆盖引用类方法。因为引用类方法绑定到类而不是对象,我相信为了做到这一点,我需要定义一个继承旧引用类的新引用类。然而,我试图继承的类是在一个外部包中定义的(dplyr)。我无法弄清楚执行此操作的正确语法,包含似乎只需要文本名称,并且不会在外部包中搜索类定义。

特别是我试图从dplyr继承DbDisconnector引用类并覆盖finalize方法。

这正确地找到了父类,但是无法分配它,因为它来自不同的包。

NewDbDisconnector <- setRefClass("NewDbDisconnector",
  contains = 'DbDisconnector',
  methods = list(
    finalize = function() {
      message("test")
    }
  ),
  where=getNamespace('dplyr')
)
# Error in assign(mname, def, where) (from file.r#75) :
#  cannot add bindings to a locked environment

包含方法只接受字符串,它们不能仅从getRefClass中获得refClass定义。

NewDbDisconnector <- setRefClass("NewDbDisconnector",
  contains = getRefClass("DbDisconnector", getNamespace("dplyr")),
  methods = list(
    finalize = function() {
      message("test")
    }
  )
)
# Error in FUN(X[[1L]], ...) :
#  the 'contains' argument should be the names of superclasses:  got an element of class “name”

我认为这应该是可能的,我只是无法找出正确的方法。

1 个答案:

答案 0 :(得分:0)

您可以将超类导入您的环境:

DbDisconnector <- getFromNamespace("DbDisconnector", "dplyr")

然后在课堂上设置contains = "DbDisconnector"