Направление функций DBI в пакете - что использовать?

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

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

или же

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

?

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

2 ответа

Решение

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

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

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

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

Другие вопросы по тегам