2009-07-10 4 views

ответ

45

На самом деле следующие работы для меня:

write("prints to stderr", stderr()) 

write("prints to stdout", stdout()) 
+0

Это на Linux, с R 2.8.1 (с использованием Rscript) – Frank

+1

Этот код также работает в Windows. Для большего контроля форматирования вы можете использовать cat вместо записи. –

+0

FWIW, это ограничено тем, что оно работает только в том случае, если первый аргумент может выводиться 'cat'. Существуют классы, которые требуют, чтобы 'print' работал, где вы должны использовать' sink', как говорит Galwegian ниже. – Harlan

7

Можно ли настроить печать для печати на stderr? ?

From Ripley himself:

Нет, но там, где стандартный вывод идет в контролируется раковине(), так что вы можете достичь того же эффекта. R внутренне не имеет представления о том, какой результат исходит от print() (который является не только одним функцией, но и сотнями методов).

7

Вот более гибкий вариант для отладки/многословной использования в Rscript. Он не только печатает до stderr по вашему запросу, но также позволяет передавать переменное количество аргументов, типов и т. Д., Например printf.

v <- function(...) cat(sprintf(...), sep='', file=stderr()) 

Теперь можно делать такие вещи, как:

v("name: %s age: %d\n", name, age) 

т.д.

+0

Это замечательно !!! Для тех, кто не понимает ..., см. Это. Http://stackoverflow.com/questions/3057341/how-to-use-rs-ellipsis-feature-when-writing-your-own-function – myloginid

0
message('for writing diagnostic info to standard error') 

сообщение используется для создания 'простых' диагностических сообщений, которые не являются ни предупреждения, ни ошибки, но тем не менее представляются в качестве условий. В отличие от предупреждений и ошибок, окончательная новая строка рассматривается как часть сообщения и не является обязательной. Обработчик по умолчанию отправляет сообщение в соединение stderr().

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