我正在设置一个包含.sqlite
数据库和一些访问数据库的函数的R包。在R中加载包后,我调用以下函数连接到DB:
db.con <- function(){
# get the data subdirectory
db.wd <- system.file("data", package = "MyPKG")
# set up the connection
drv <- dbDriver("SQLite")
con <- dbConnect(drv,dbname = file.path(db.wd, "MyDB.db"))
return(con)
}
因此,每次我加载包裹时,我都必须这样做:
con <- db.con()
如果我可以避免每次手动连接并自动连接到DB(当加载包时),那将是很好的。我试图将上面的代码放到.onLoad
函数中,但con
对象对包的函数不可见...
干杯,F
答案 0 :(得分:2)
我会创建一个环境变量来存储您的设置。这比使用全球环境更安全。
在您的包中的某个位置,您可以定义它:
.settings <- new.env() ## the "." to not be exported
然后在.attach
函数中使用以下函数对其进行初始化:
## you can use .onLoad also ...
.onAttach <- function(libname, pkgname) {
.settings$con <- "connection"
}
然后您可以在任何包函数中使用它,例如:
get_connection <- function() print(.settings$con)