引用包中的 DBI 函数 - 使用哪个?

Refering DBI functions in package - which to use?

在使用 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")

?

第一种方法迫使我在 Imports 中使用 DBI,所以我更喜欢第二种方法。但另一方面,我应该调用虚函数,让 R 来决定调用什么。

从最终用户的角度来看,这无关紧要:RSQLite 依赖于 DBI,因此您的包无论如何都需要安装 RSQLite 和 DBI。从文体的角度来看,我更喜欢第一种方法,否则你就是在猜测 R 的方法调度机制。

DBI 规范确实要求所有后端重新导出所有 DBI 方法,因此两种表示法(RSQLite::dbConnect()DBI::dbConnect())对于所有实际目的都是相同的:

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

DBI:: 符号表示您正在使用 DBI 函数,但如果您的程序包仅使用 RSQLite,从代码风格的角度来看,使用该前缀似乎没问题。