如何将R CMD检查的输出发送到文件或变量?

And*_*rew 2 r devtools cran

上下文:尝试有效地解决我的无可见性绑定 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注意和警告时,我最终得到了输出.

Tho*_*mas 5

这是我为构建和检查包而遵循的非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)

这可能更方便.