Направление функций 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.