Ссылка на функции DBI в пакете — что использовать?

При разработке пакета с использованием расширения DBI (например, RJDBC, RSQLite), на какой пакет следует ссылаться?

connect_my_db <- function() DBI::dbConnect(RSQLite::SQLite(), "my_db.sqlite")

or

connect_my_db <- function() RSQLite::dbConnect(RSQLite::SQLite(), "my_db.sqlite")

?

Первый метод заставляет меня использовать DBI в импорте, поэтому я предпочитаю второй. Но с другой стороны, я должен вызвать виртуальную функцию и позволить R решить, что вызывать.


person Marek    schedule 04.07.2017    source источник


Ответы (2)


Спецификация DBI требует, чтобы все серверные части повторно экспортировали все методы DBI, поэтому обе записи (RSQLite::dbConnect() и DBI::dbConnect()) идентичны для всех практических целей:

identical(DBI::dbConnect, RSQLite::dbConnect)
#> [1] TRUE

Обозначение DBI:: указывает на то, что вы используете функцию DBI, но если ваш пакет использует только RSQLite, с точки зрения стиля кода можно использовать этот префикс.

person krlmlr    schedule 04.07.2017

С точки зрения конечного пользователя это не имеет значения: RSQLite зависит от DBI, поэтому для вашего пакета в любом случае потребуется установить и RSQLite, и DBI. Со стилистической точки зрения я бы предпочел первый подход, так как в противном случае вы сомневаетесь в механизме диспетчеризации методов R.

person Hong Ooi    schedule 04.07.2017