使用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决定调用什么。
答案 0 :(得分:1)
从最终用户的角度来看,无关紧要:RSQLite依赖于DBI,因此您的软件包无论如何都需要安装RSQLite和DBI。从风格的角度来看,我更喜欢第一种方法,因为否则你会猜测R的方法调度机制。
答案 1 :(得分:1)
DBI规范确实要求所有后端重新导出所有DBI方法,因此两种符号(RSQLite::dbConnect()
与DBI::dbConnect()
)在所有实际用途中都是相同的:
identical(DBI::dbConnect, RSQLite::dbConnect)
#> [1] TRUE
DBI::
表示您表示您正在使用DBI函数,但如果您的程序包仅使用RSQLite
,从代码样式的角度来看,使用该前缀似乎很好。