Как включить вывод R stderr в документ Sweave

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

Итак, фрагмент кода Sweave

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

в идеале создать документ с

stop('hello')
Error: hello

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

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


person skyebend    schedule 15.02.2013    source источник
comment
Как насчет дословной латексной среды?   -  person Roman Luštrik    schedule 15.02.2013
comment
Дубликат: stackoverflow.com/q/3131270/946850   -  person krlmlr    schedule 15.02.2013
comment
добавил пояснение к моему вопросу о том, что это длительный процесс (поэтому я бы предпочел не запускать его дважды, как предполагает этот основной ответ), и я также хотел бы зафиксировать вывод предупреждения, который я не думаю, что 'cat ()' схватит.   -  person skyebend    schedule 15.02.2013


Ответы (1)


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

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

В Sweave вы можете использовать следующий обходной путь, взятый из это сообщение на R-помощь :

%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')))
@
person juba    schedule 15.02.2013
comment
Я использовал Sweave, попробую с Knitr. Если я пойду по этому пути, есть ли способ, чтобы R CMD build или процесс сборки CRAN знали, что нужно использовать Kniter вместо Sweave при восстановлении виньеток пакета? - person skyebend; 15.02.2013
comment
@skyebend Это должно быть возможно с R 3.0.0 без обходного пути. См. здесь: yihui.name/knitr/demo/vignette - person juba; 15.02.2013
comment
Трикотаж отлично работает! Но я пока застрял в R 2.*, поэтому мой файл .Rnw не работает R CMD check. :-( Надеюсь, через пару месяцев можно будет перейти на R 3. Также скрытое решение cat(try()) не работает для меня, так как оно включает вызов в выводе: % выполняет код, но отображает только ошибку ‹‹echo=FALSE, eval =TRUE››= cat(try(stop('hello'))) @ Ошибка в try(stop(hello)) : hello И он показывает текст warning(), но не текст message(). - person skyebend; 16.02.2013