Расширение класса S4 из другого пакета: ошибка reconcilePropertiesAndPrototype

Я пытаюсь написать подкласс для RJDBC::JDBCConnection, так как мне нужны пользовательские методы для подключения пакета dbplyr с использованием подхода из dplyr#2941 (первоначально отсюда). Однако я не перезаписываю методы *.JDBCConnection, а хочу написать методы для подкласса JDBCConnection.

Поэтому, следуя совету из этого вопроса о переполнении стека, я написал свой пакет, который, по сути, таков:

### 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 <[email protected]>
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 на @importClassesFrom согласно этому вопросу SO, но результат был таким же.

Как я могу запустить document()?


person akraf    schedule 01.10.2018    source источник


Ответы (2)


Вам также необходимо добавить

Imports: RJDBC

в ваш файл DESCRIPTION. См., например, это руководство:

Если ваш пакет использует функции из других пакетов, вам также необходимо добавить несколько строк в файл DESCRIPTION.

...

Imports используется для пакетов, которые необходимы вашему пакету, но которые не нужно загружать с помощью library(). Пакеты, упомянутые в операторах @import или @importFrom в ваших комментариях Roxygen2, или чьи функции доступны через оператор ::, должны быть здесь.

После этого ваш пакет document() меня вполне устроит.

person duckmayr    schedule 01.10.2018

Мне удалось задокументировать пакет, когда я не полагаюсь на roxygen2 для записи моего DESCRIPTION файла, а добавляю пакеты самостоятельно. NAMESPACE управляется roxygen2.

Если я добавлю строку

Imports: methods, RJDBC

or

Depends: RJDBC

в файл DESCRIPTION вручную, devtools::document() запускается без ошибок.

[дакмайр обнаружил это одновременно]

person akraf    schedule 01.10.2018