web-dev-qa-db-ja.com

関数内で出力されるメッセージを非表示または無効にする方法

次のような関数があるとします。

_ff <- function(x) {
  cat(x, "\n")
  x^2}
_

そしてそれを実行します:

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

私の質問は、次のようにcat(x, "\n")から出力される_5_を無効または非表示にする方法です。

_y <- ff(5)
y
# [1] 25
_
21
David Z

invisiblecapture.outputを使用できます

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

またはsink

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

Hadley Wickhamによる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

12
Ben