Подавить сообщения, отображаемые "print" вместо "message" или "warning" в R
Многие пакеты R, с которыми я работаю, включают функции, которые передают все свои сообщения и предупреждения с помощью команд для вызовов print (), а не для команд message () или warning (). Я хотел бы иметь возможность отключить индикаторы выполнения этих функций и т. Д., Но стандартные supressWarnings () или 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 (), которую я мог бы обернуть вокруг вызова этой функции, который подавлял бы предупреждающие и бесполезные сообщения (но все равно печатал бы возвращаемое значение).
2 ответа
Ну, эти пакеты глючат с самого начала. Использование print()
для чего-либо, кроме побочного эффекта в print
реализации является серьезной ошибкой.
Тем не менее, вы можете просто использовать capture.output()
собирать вывод из такого кода вместо его печати. Так что за вышесказанное было бы
capture.output(x <- silly_developer_function(...))
print(x)
Еще один хакерский способ - переопределить значение по умолчанию. print
функция. Это повлияет на некоторые функции, такие как печать тела функций, но объекты с их собственными методами печати по-прежнему возвращаются как обычно.
print <- function(...) {}
> silly_developer_function("a")
[1] "a"
> silly_developer_function(1)
[1] 1