подавить сообщения, отображаемые с помощью «print» вместо «message» или «warning» в R - PullRequest
20 голосов
/ 10 января 2012

Многие пакеты 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 ]

29 голосов
/ 10 января 2012

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

Тем не менее, вы можете просто использовать capture.output() для сбора выходных данных такого кода вместо его печати. Так что за вышесказанное это будет

capture.output(x <- silly_developer_function(...))
print(x)
0 голосов
/ 10 января 2012

Еще один хакерский способ - переопределить функцию по умолчанию print. Это повлияет на некоторые функции, такие как печать тела функций, но объекты с их собственными методами печати по-прежнему возвращаются как обычно.

print <- function(...) {}

> silly_developer_function("a")
[1] "a"
> silly_developer_function(1)
[1] 1
...