我正在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
将包含在帮助页面上不可见的代码,但这些代码将在测试期间运行。