上下文:尝试有效地解决我的无可见性绑定 CMD检查问题.
我尝试了两种口味captureOutput:
cmd_output <- R.utils::captureOutput(devtools::check(args="--no-tests"))
cmd_output <- utils::capture.output(devtools::check())
Run Code Online (Sandbox Code Playgroud)
和下沉
sink("cmd_output.txt")
devtools::check(args="--no-tests")
sink()
unlink("cmd_output.txt")
Run Code Online (Sandbox Code Playgroud)
无济于事.devtools::document()当我想要CMD注意和警告时,我最终得到了输出.
这是我为构建和检查包而遵循的非devtools工作流程.请注意,必须在tarball上执行检查,而不是包目录,因此必须先构建.devtools无形地做到这一点,但你必须明确这一点.
假设您在包含包目录的目录中(即,从包目录向上一级).
pkg <- "packagename"
version <- read.dcf(paste('.',pkg,'DESCRIPTION',sep='/'))[,'Version']
# build
system2("R", paste0("CMD build ", pkg), stdout = "build.txt", stderr = "build.txt")
# check
system2("R", paste0("CMD check ", pkg, "_", version, ".tar.gz --as-cran"), stdout = "check.txt", stderr = "check.txt")
# install
system2("R", paste0("CMD INSTALL -l ",Sys.getenv('R_HOME'),"/library ", pkg), stdout = "install.txt", stderr = "install.txt")
Run Code Online (Sandbox Code Playgroud)
这会将每个命令的输出转储到自己的文本文件中.
您也可以指定wait = FALSE在不占用R的情况下在单独的进程中运行它们.如果您的检查需要很长时间,因为您可以从R中继续进行其他工作,这可能很有用.
Hadley还建议,如果您使用,check()您可以访问自动生成的检查文件,该文件R CMD check位于此处:
chk <- check()
# install log
file.path(chk, paste0(as.package(".")$package, ".Rcheck"), "00install.out")
# check log
file.path(chk, paste0(as.package(".")$package, ".Rcheck"), "00check.log")
Run Code Online (Sandbox Code Playgroud)
这可能更方便.