我正在使用以下方法开发R包:
pkgs <- c("devtools", "testthat", "roxygen2", "configr")
pkgs_miss <- pkgs[which(!pkgs %in% utils::installed.packages()[, 1])]
if (length(pkgs_miss) > 0) {
utils::install.packages(pkgs_miss)
}
我的文件结构如下:
/ mypackage
/ inst
/conf
* config.yml, env_conf.R
/ man
/ packrat
/ R
* myfun1.R, myfun2.R
/ tests
为了清楚和透明起见,我试图将所有环境变量都保留在env_conf.R
(和config.yml
)中,在那里我要通过{{1}从.Renviron
导入这些环境变量},如下所示:
config.yml
此外,我要将这些环境变量导入production:
USERNAME: Sys.getenv("MYUSERNAME")
PASSWORD: Sys.getenv("MYPASSWORD")
HOST: Sys.getenv("MYHOST")
:
env_conf.R
现在,我想通过configuration <- configr::read.config(system.file('inst/conf', 'config.yml', package='mypackage'))
USERNAME <– eval(parse(text = configuration$production$USERNAME))
PASSWORD <– eval(parse(text = configuration$production$PASSWORD))
HOST <– eval(parse(text = configuration$production$HOST))
或env_conf.R
中的以下方式在myfun1.R中的函数myfun1中使用这些变量:
config.yml
是否可以通过给定所需上下文的方式将这些变量导入myfun1.R?
我尝试在文档功能myfun1中使用#' Query MySQL Database
#' @param some_statement
#' @return sql output
#' @importFrom DBI dbConnect dbGetQuery
#' @export
myfun1 <- function(some_statement){
con <- DBI::dbConnect(
RMySQL::MySQL(),
username = USERNAME,
password = PASSWORD,
host = HOST,
port = 3306
)
result <- DBI::dbGetQuery(con, some_statement)
result
}
的不同组合,但未成功,多数情况下会导致system.file('inst/conf', 'env_conf.R', package='mypackage')
但是不知道是否还有更简洁的方法。感谢任何见解!