Как скрыть или отключить встроенное печатное сообщение

#r #stata

#r #печать

Вопрос:

Предположим, у меня есть такая функция, как:

 ff <- function(x) {
  cat(x, "n")
  x^2}
 

И запустите его по:

 y <- ff(5)
# 5 
y
# [1] 25
 

Мой вопрос заключается в том, как отключить или скрыть 5 напечатанное из cat(x, "n") таких:

 y <- ff(5)
y
# [1] 25
 

Комментарии:

1. вы могли бы добавить verbose= T/F параметр и if блок

Ответ №1:

Вы можете использовать capture.output с invisible

 > invisible(capture.output(y <- ff(2)))
> y
[1] 4
 

или sink

 > sink("file")
> y <- ff(2)
> sink()
> y
[1] 4
 

Ответ №2:

Вот хорошая функция для подавления вывода от cat() Хэдли Уикхема:

 quiet <- function(x) { 
  sink(tempfile()) 
  on.exit(sink()) 
  invisible(force(x)) 
} 
 

Используйте это так:

 y <- quiet(ff(5))
 

Источник: http://r.789695.n4.nabble.com/Suppressing-output-e-g-from-cat-td859876.html

Комментарии:

1. Это именно то, что я искал. Спасибо!

2. sink('/dev/null') может быть, немного предпочтительнее работать на mac / linux.

Ответ №3:

Вы также должны проверить purrr::quietly() .

 ff <- function(x) {
  cat(x, "n")
  x^2
}

purrr::quietly(ff)(7)$result
#> [1] 49
 

Создано 2020-09-10 пакетом reprex (версия 0.3.0)