引用包中的 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
,从代码风格的角度来看,使用该前缀似乎没问题。
在使用 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
,从代码风格的角度来看,使用该前缀似乎没问题。