Подавлять сообщения, отображаемые "печатью" вместо "сообщения" или "предупреждения" в R
Многие R-пакеты, с которыми я работаю, включают функции, которые предоставляют все свои сообщения и предупреждения через команды для вызовов print(), а не команд message() или warning(). Я хотел бы иметь возможность отключать эти индикаторы прогресса работы и т.д., Но стандартные недопустимые предупреждения() или supressMessages этого не делают. Есть ли способ, которым я могу просто подавить печать?
Например:
silly_developer_function <- function(x){
print("Thanks for using my function!!")
if(is(x, "numeric"))
print("warning, x should be a character")
x
}
Я хотел бы иметь простую функцию suppressPrint(), которую я мог бы обернуть вокруг вызова этой функции, которая будет подавлять предупреждения и бесполезные сообщения (но все равно печатать возвращаемое значение).
Ответы
Ответ 1
Ну, эти пакеты с ошибками начинаются. Использование print()
для чего-либо, кроме побочного эффекта в реализациях print
, является серьезной ошибкой.
Тем не менее, вы можете просто использовать capture.output()
для сбора вывода из такого кода вместо его печати. Таким образом, для вышесказанного было бы
capture.output(x <- silly_developer_function(...))
print(x)
Ответ 2
Еще один хакерский способ - переопределить функцию print
по умолчанию. Это повлияет на некоторые функции, такие как печать тела функций, но объекты со своими собственными методами печати все равно возвращаются, как обычно.
print <- function(...) {}
> silly_developer_function("a")
[1] "a"
> silly_developer_function(1)
[1] 1