Подавить сообщения, отображаемые "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
Другие вопросы по тегам