Подтвердить что ты не робот

Как вы печатаете на stderr в R?

Как вы печатаете stderr в R?

Это особенно полезно для скриптов, написанных в Rscript.

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

и др.

Ответ 3

Можно ли настроить печать функция для печати в stderr?

Из самого Рипли:

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

Ответ 4

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

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

Ответ 5

Вопреки принятому предложению об ответе на использование функции write(), это было бы нецелесообразным использованием этой функции, поскольку она предназначена для записи данных в файл. Из write() документации мы имеем:

Данные (обычно матрица) x записываются в файл. Если x - это двумерная матрица, вам нужно транспонировать ее, чтобы столбцы в файле были такими же, как и во внутреннем представлении.

Тем не менее, я бы рекомендовал использовать cat() вместе с соответствующим обработчиком условий stderr() или stdout() в параметре file = ....

Таким образом, чтобы написать сообщение со стандартной ошибкой, нужно использовать:

cat("a message that goes to standard error", file = stderr())

Или:

message("also sent to standard error")

Для стандартного выхода просто используйте cat() напрямую, так как он настроен на запись в stdout() по умолчанию.

cat("displays in standard out by default")