2016-09-01 3 views
10

Я пытаюсь распечатать на консоль (или окно вывода) для целей отладки. Например:Как распечатать на консоли при использовании knitr?

\documentclass{article} 

\begin{document} 

<<foo>>= 
print(getwd()) 
message(getwd()) 
message("ERROR:") 
cat(getwd(), file=stderr()) 
not_a_command() # Does not throw an error? 
stop("Why doesn't this throw an error?") 
@ 


\end{document} 

Я получаю результаты в выходном PDF, но моя проблема в том, у меня есть сценарий, который не завершил (так что нет никакого вывода PDF для проверки), и я пытаюсь понять, почему , Похоже, что нет выходного файла журнала, если вязание не завершено успешно.

Я использую knitr 1.13 и Rstudio 0.99.896.

EDIT: Приведенный выше код будет корректно выводить (и прерывать), если я перехожу к Sweave, так что это заставляет меня думать, что это проблема типа knitr.

+0

Это полезное обходное решение, спасибо @CL. ! – bwk

+1

Вы все равно можете запускать код за один кусок за раз или по одной строке за раз. Поскольку вы используете RStudio, есть горячие клавиши (Code> Run Region) для запуска текущего фрагмента, следующего фрагмента, всех фрагментов. – Gregor

ответ

5

Этот вопрос имеет несколько аспектов - и его частично XY problem. В основе лежит вопрос (как я его читал):

Как я могу узнать, что не так, если knitr не работает и не создает выходной файл?

  • В случае выхода PDF, довольно часто компиляции вывода PDF терпит неудачу после возникновения ошибки, но есть еще промежуточный файл TEX. Открытие этого файла может привести к появлению сообщений об ошибках.
  • As suggested by Gregor, вы можете запустить код в кусках по строкам в консоли (или куском). Однако это может не воспроизводить все проблемы, особенно если они связаны с рабочим каталогом или средой.
  • capture.output может использоваться для печати отладочной информации во внешний файл.
  • Наконец (в отличие от моих предыдущих комментариев), это является можно напечатать на окне RStudio о ходе (или однако это называется): Сообщения с крючками будут напечатаны на окне прогресса. В основном, сообщение должно быть получено от knitr, а не из кода knitr.

Как распечатать отладочную информацию о окне прогресса в RStudio?

Следующий пример выводит все объекты в окружающей среде после каждого блока с debug = TRUE:

\documentclass{article} 

\begin{document} 

<<>>= 
knitr::knit_hooks$set(debug = function(before, options, envir) { 
    if (!before) { 
    message(
     paste(names(envir), as.list(envir), 
      sep = " = ", collapse = "\n")) 
    } 
}) 
@ 

<<debug = TRUE>>= 
a <- 5 
foo <- "bar" 
@ 

\end{document} 

Окно прогресса гласит:

Progress window

Конечно, для документов с более или более крупные объекты крючок должен быть отрегулирован для выборочной печати (частей) объектов.

 Смежные вопросы

  • Нет связанных вопросов^_^