Pergunta

Eu estou tentando substituir uma referência de método de classe.Porque de referência métodos de classe são vinculados à classe, ao invés de incluir o objeto, acredito que para fazer isso eu preciso para definir uma nova referência de classe que herda da antiga classe de referência.No entanto, a classe que eu estou a tentar herdar é definido um pacote de minas (dplyr).Eu não posso imaginar a sintaxe correta para fazer isso, contém parece necessitar apenas de um nome de texto, e não busca de definições de classes em pacotes externos.

Em particular, eu estou tentando herdar da DbDisconnector classe de referência de dplyr e sobrepor o método finalize.

Esta compreensão encontra a classe pai, mas não pode atribuir a ele, é a partir de um pacote diferente.

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

Contém apenas os métodos de aceitar cadeias de caracteres, eles não podem simplesmente ser dado um refClass definição de getRefClass.

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”

Eu acho que este deve ser possível, eu simplesmente não consigo descobrir a maneira correta de fazê-lo.

Foi útil?

Solução

Você pode importar a superclasse para o seu ambiente:

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

E, em seguida, definir contains = "DbDisconnector" em sua classe.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top