2013-02-15 1 views
1

Я работаю над вине R-пакетами, и есть ряд случаев, когда я хотел бы включить вывод ошибки в документ в качестве примера для пользователей.Как включить вывод R stderr в документе Sweave

Так Sweave код кусок

<<throws_error>>= 
stop('hello') 
@ 

бы идеально подготовить документ с

stop('hello') 
Error: hello 

Моим реальным примером является довольно долго работает процесс, и я хотел бы захватить вывод предупреждений и сообщений, а также ошибок.

Я испортил различные варианты кода Sweave, включая параметры. Единственное решение, с которым я столкнулся, - это иметь скрытый фрагмент кода, который печатает текст ошибки с cat() - вот что поражает цель использования Sweave. Похоже, может быть возможно решение с функцией sink(), чтобы как-то перенаправить stderr, но также не смогли понять это. Какие-либо предложения?

+0

Как насчет дословной среды латекса? –

+0

Duplicate: http://stackoverflow.com/q/3131270/946850 – krlmlr

+0

добавил пояснение к моему вопросу о том, что это длительный процесс (поэтому я бы предпочел не запускать его дважды, как это предлагает основной ответ), и я бы тоже как захватить предупредительный вывод, который я не думаю, что «cat()» захватит. – skyebend

ответ

2

Вы используете Sweave или knitr для создания ваших файлов LaTeX и pdf?

По умолчанию с knitr под RStudio, созданный документ - это почти то, что вы хотите получить.

Под Sweave, вы можете использовать следующий метод обхода, взятый из this message on R-help:

%outputs the R code but does not execute it. So no error 
<<echo=TRUE, eval=FALSE>>= 
stop('hello') 
@ 

% executes the code but displays only the error 
<<echo=FALSE, eval=TRUE>>= 
cat(try(stop('hello'))) 
@ 
+0

Я использовал Sweave, я попробую с knitr. Если я поеду на этот маршрут, есть ли способ, чтобы «R CMD build» или процесс сборки CRAN знали использовать трикотаж вместо Sweave при восстановлении виньетирования пакетов? – skyebend

+1

@skyebend Должно быть возможно с R 3.0.0 без обходного пути. См. Здесь: http://yihui.name/knitr/demo/vignette/ – juba

+0

Knitr отлично работает! Но я застрял в R 2. * пока, так что мой .Rnw-файл сбой «R CMD check». :-(Надеюсь, мы сможем переместиться на R 3 через пару месяцев. Также скрытое решение 'cat (try()) для меня не работает, так как оно включает в себя вызов на выходе: % выполняет код, но отображается только ошибка << эхо = FALSE, Eval = TRUE >> = кошки (попробуйте (стоп ('привет'))) @ ошибка в попытке (остановка ("привет")): привет И это показывает текст 'warning()', но не 'message()' text. – skyebend

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

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