niszetの日記

アナログCMOS系雑用エンジニアが頑張る備忘録系日記

(R) suppressPackageStartupMessagesでライブラリをアタッチする際のメッセージを抑制する

ただし、むやみに使ってはいけませんよ…

さて、いくつかのパッケージは`library()'で読んだ際に(警告を含む)メッセージを出してきます。重要なメッセージの場合もありますが、既に確認済みで「問題なし」と判断できている場合は毎回出てくるメッセージはうざったいことがありますよね。

例えばこういうのがライブラリを読み込んだ時に出てくるわけです。

library(tidyverse)
#> -- Attaching packages --------------------------------------- tidyverse 1.2.1 --
#> √ ggplot2 2.2.1     √ purrr   0.2.4
#> √ tibble  1.4.2     √ dplyr   0.7.4
#> √ tidyr   0.8.0     √ stringr 1.3.0
#> √ readr   1.1.1     √ forcats 0.3.0
#> -- Conflicts ------------------------------------------ tidyverse_conflicts() --
#> x dplyr::filter() masks stats::filter()
#> x dplyr::lag()    masks stats::lag()

f:id:niszet:20180430160915p:plain

まさかのtidyverse名指し批判。ちなみにRが3.5.0になっていないのは1か月くらい様子見している期間を入れているためです(パッケージの移行が、ね…)

Rmd中の場合、knitrのchunk optionでinclude=FALSEの指定をするとこの(に限らず、Rのコードの処理の結果どれもが)出力が抑制されるのですが、それ以外のシーンでも抑制したいなーということがあるはずです。

こうします。

suppressPackageStartupMessages(library(tidyverse))

これで上記のような表示が一切なくパッケージを使うことが出来ます。

f:id:niszet:20180430161041p:plain

同様に、関数内部で'message()'や'warning()'によって発せられたメッセージや警告については下記の関数で抑制1できます。

suppressMessages()
suppressWarnings()

何度も書きますが、メッセージや警告はパッケージ作成者がわざわざ出しているメッセージですので、それを無視して本当に大丈夫であることがわかっているときだけ、これらの関数で抑制しましょう。
「おかしな結果が出るなぁ…?」からの「実はwarning出てたじゃん…!suppressしてた…orz」までの流れは様式美です。気をつけなされ・・・

Enjoy!!


  1. 実際のところは無視しているのか非表示にしているのか…?warnings()で確認できるだろうか?