2015-07-06 5 views
2

Контекст: попытка эффективного решения проблем с дефектами CMD no visibile binding.Как я могу отправить результат проверки R CMD в файл или переменную?

Я пробовал как вкус captureOutput:

cmd_output <- R.utils::captureOutput(devtools::check(args="--no-tests")) 
cmd_output <- utils::capture.output(devtools::check()) 

и раковина

sink("cmd_output.txt") 
devtools::check(args="--no-tests") 
sink() 
unlink("cmd_output.txt") 

безрезультатно. Я получаю вывод devtools::document(), когда хочу CMD NOTE и WARNING.

+1

Это та же проблема, что и здесь: https://github.com/hadley/devtools/issues/315. В принципе, devtools использует 'system', который не обеспечивает гибкий интерфейс для управления выходом, поэтому вам, вероятно, не повезло. Используйте вызов 'system2' для проверки R CMD, чтобы обойти это или вызвать функции контроля качества в инструментах напрямую. – Thomas

+0

очень полезно - спасибо - любой шанс вы могли бы предложить синтаксис для вызова R CMD check через system2? доказывая, что он очень абстрактен для Google. 'system2 (« R », args = c (« CMD »,« check »,« что-то идет здесь? »))' – Andrew

ответ

5

Вот рабочий процесс non-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") 

Это приведет к выгрузке вывода из каждой команды в собственный текстовый файл.

Вы также можете указать wait = FALSE запускать их в отдельном процессе, не держа свой R. Это может быть полезно, если ваши чеки займет много времени, потому что вы можете приступить к другой работе внутри R.

Хедли также предположил, что если вы используете 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") 

Это может более не может быть более удобным.