R包需要创建配置文件时的最佳实践



我正在R中创建一个包,导出一个创建配置文件的函数。

当运行devtools::check()时,我得到下面的NOTE:

❯ checking for non-standard things in the check directory ... NOTE
Found the following files/directories:
‘conf_file.cfg’

我已经验证了它指的是不应该存在的文件。

因此,我查看了一些将configuration files创建为lintr的软件包。lintr::use_lintr()函数创建一个.lintr文件。参见下面从lintr的GitHub页面复制的函数。

#' Create a minimal lintr config file as a starting point for customization
#'
#' @param path Path to project root, where a `.lintr` file should be created.
#' If the `.lintr` file already exists, an error will be thrown.
#' @param type What kind of configuration to create?
#'
#'  * `tidyverse` creates a minimal lintr config, based on the default linters ([linters_with_defaults()]).
#'    These are suitable for following [the tidyverse style guide](https://style.tidyverse.org/).
#'  * `full` creates a lintr config using all available linters via [linters_with_tags()].
#'
#' @return Path to the generated configuration, invisibly.
#'
#' @export
#' @seealso `vignette("lintr")` for detailed introduction to using and configuring lintr.
#' @examples
#' if (FALSE) {
#'   # use the default set of linters
#'   lintr::use_lintr()
#'   # or try all linters
#'   lintr::use_lintr(type = "full")
#'
#'   # then
#'   lintr::lint_dir()
#' }
use_lintr <- function(path = ".", type = c("tidyverse", "full")) {
config_file <- normalizePath(file.path(path, getOption("lintr.linter_file")), mustWork = FALSE)
if (file.exists(config_file)) {
stop("Found an existing configuration file at '", config_file, "'.")
}
type <- match.arg(type)
the_config <- switch(
type,
tidyverse = list(
linters = 'linters_with_defaults() # see vignette("lintr")',
encoding = '"UTF-8"'
),
full = list(
linters = 'all_linters(packages = "lintr") # see vignette("lintr")',
encoding = '"UTF-8"',
exclusions = 'list("renv", "packrat") # see ?lintr::exclude'
)
)
write.dcf(the_config, config_file, width = Inf)
invisible(config_file)
}

注意@examples有一个if (FALSE)语句。因此,该示例将不会在devtools::check()命令期间运行。

在我的情况下,我试图在.Rbuildignore文件中插入文件名,但没有成功。

嗯,我也可以使用if (FALSE)语句,但是停止接收NOTE是最好/唯一的解决方案吗?

.Rbuildignore

^renv$
^renv.lock$
^.*.Rproj$
^.Rproj.user$
^conf.*$

虽然我不相信这是最好的方法,但我将展示我找到的"最佳实践"解决方案。关于创建配置文件。

基本上,在devtools::check()过程中,将函数分成两部分对于测试目的是有意义的。我希望对此有更多的评论。

跟随一个小例子:

#' @title create_file
#'
#' @description Creates a configuration file
#'
#' @param conf_file A full path for the setting_file
#' @examples
#' dontshow{full_path_filename <- tempfile()}
#' create_file(full_path_filename)
create_file <- function(conf_file) {
write("# This is an empty file", file = conf_file)
}

#' @title initialize
#'
#' @description Initializes the enviroment
#'
#' @examples
#' dontrun{initialize()}
#' @export
initialize <- function() {
project_path <- getwd()
configuration_file <- file.path(project_path, "conf_file.cfg")
create_file(conf_file = configuration_file)
}

所以,这个想法是有一个exported函数作为一个编排器,它不会被测试(dontrun) -谢谢r2evans。

有效创建文件的函数使用dontshow创建一个tempfile。dontshow将包含在帮助页面上不可见的代码,但这些代码将在测试期间运行。

相关内容

  • 没有找到相关文章

最新更新