R関数は、「副作用」のためにマスクされていてはいけません。これはルールではありませんが、強くお勧めします。それが良い習慣であることの証拠として、ふわふわした機能がprint
またはcat
を使用して出力を印刷し、エンドユーザーが無効にするのに苦労しているSO like this oneに関する多くの質問があります。
これに基づいて、print()
ではなくmessage()
を使用するか、印刷を無効にする引数を追加することを強くお勧めします。 message()
は、実行中にコンソールに「正しい」方法で印刷されますが、データ構造に応じて結果をうまくフォーマットしません。
fun <- function(x) {
result = x + 1
message(result)
invisible(result)
}
それはより複雑な出力を持っている可能性がある場合、あなたは(mtcars
にデモ)このような何かを試みることができる:
あなたの関数は、単純な出力を想定した場合
したがって、その後、私はこのようにそれをやって推薦します
fun <- function(x) {
result = head(mtcars)
sapply(capture.output(print(result)), message)
invisible(result)
}
メッセージを簡単suppressMessages()
に呼び出しをラップすることによって抑制することができ、かつmessage = F
は、「メッセージを無視」と言うためにknitr
コードの塊のための便利な引数です。
他のオプションは
fun <- function(x, quietly = FALSE) {
result = x + 1
if (!quietly) print(result)
invisible(result)
}
引数を追加することであり、私も長く、この奇妙な行動が本当に必要かどうかについて、ハードだと思うだろう。通常、期待通りに動作する関数を持つことは、期待を払う特別なケースを持つよりも優れています。
「print(x + 1)」行を削除すると機能します。 – polka
@polkaこれは、新しいオブジェクトに割り当てるときに結果を出力しなくなり、上記のケース1を満たしません。 –
私はあなたの質問をはっきりと理解していません。もっと具体的に考えるか? – polka