Как вы печатаете stderr
в R
?
Это особенно полезно для скриптов, написанных в Rscript
.
Как вы печатаете stderr
в R
?
Это особенно полезно для скриптов, написанных в Rscript
.
На самом деле для меня работает следующее:
write("prints to stderr", stderr())
write("prints to stdout", stdout())
Здесь более гибкая версия для отладки/многократного использования в Rscript. Он не только печатает на stderr
по вашему запросу, но также позволяет передавать переменное количество аргументов, типов и т.д., Например printf
.
v <- function(...) cat(sprintf(...), sep='', file=stderr())
Теперь можно делать такие вещи, как:
v("name: %s age: %d\n", name, age)
и др.
Можно ли настроить печать функция для печати в stderr?
Нет, но там, где идет стандартный вывод, управляемый раковиной(), поэтому вы можете добиться такого же эффекта. R внутренне не имеет представления о том, какой результат print() (который не только один но сотни методов).
message('for writing diagnostic info to standard error')
сообщение используется для генерации diagnostic простых диагностических сообщений, которые не являются ни предупреждениями, ни ошибками, но, тем не менее, представлены как условия. В отличие от предупреждений и ошибок, последний перевод строки рассматривается как часть сообщения и является необязательным. Обработчик по умолчанию отправляет сообщение в соединение stderr().
Вопреки принятому предложению об ответе на использование функции 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")