从另一个包扩展S4类:reconcilePropertiesAndPrototype错误

时间:2018-10-01 11:29:49

标签: r extends s4 roxygen dbplyr

我正在尝试为RJDBC::JDBCConnection编写一个子类,因为我需要使用dplyr#2941(最初是from here)中的方法使用自定义方法来连接dbplyr包。但是,我不是要覆盖*.JDBCConnection方法,而是要为JDBCConnection的子类编写方法。

因此,根据this Stack Overflow question的建议,我写了我的包裹,基本上是这样的:

### R/testclass.R ####################
#' Test class
#'
#' This extends JDBCConnection in package RJDBC
#'
#' @import RJDBC
#'
setClass("TestConnection", contains = "JDBCConnection")

### DESCRIPTION ######################
Package: test
Type: Package
Title: What the Package Does (Title Case)
Version: 0.1.0
Author: Who wrote it
Maintainer: The package maintainer <yourself@somewhere.net>
Description: More about what it does (maybe more than one line)
    Use four spaces when indenting paragraphs within the Description.
License: What license is it under?
Encoding: UTF-8
LazyData: true

要扩展的类存在,可以使用help("JDBCConnection-class", package = "RJDBC")进行检查。

在此程序包中调用devtools::document()会返回以下错误:

Updating test documentation
Loading test

Error in reconcilePropertiesAndPrototype(name, slots, prototype, superClasses,  : 
no definition was found for superclass "JDBCConnection" in the specification of class "TestConnection"

我还尝试用@import as per this SO question替换@importClassesFrom,但是结果是一样的。

如何让document()运行?

2 个答案:

答案 0 :(得分:3)

您还需要添加

Imports: RJDBC

到您的DESCRIPTION文件。例如,参见this guide

  

如果您的程序包正在使用其他程序包中的功能,则还需要   在描述文件中添加一些行。

     

...

     

导入用于您的软件包所需的软件包,但是   不需要加载library()。包中提到的   Roxygen2注释中的@import或@importFrom语句,或   通过::运算符访问函数,应该在此处。

之后,您的包裹document()对我很好。

答案 1 :(得分:2)

当我不依靠roxygen2编写我的DESCRIPTION文件而是自己添加软件包时,我成功地记录了该软件包。 NAMESPACEroxygen2管理。

如果我添加线路

Imports: methods, RJDBC

Depends: RJDBC

手动DESCRIPTION运行devtools::document()文件。

[ duckmayr同时发现了它]