ggplot に欠損値を渡すと、とても親切で、欠損値が存在することを警告してくれます。これは対話型セッションでは許容されますが、レポートを作成するときは、特に多数の警告がある場合、出力が警告で乱雑にならないようにする必要があります。以下の例では、ラベルが 1 つ欠落しているため、警告が生成されます。
library(ggplot2)
library(reshape2)
mydf <- data.frame(
species = sample(c("A", "B"), 100, replace = TRUE),
lvl = factor(sample(1:3, 100, replace = TRUE))
)
labs <- melt(with(mydf, table(species, lvl)))
names(labs) <- c("species", "lvl", "value")
labs[3, "value"] <- NA
ggplot(mydf, aes(x = species)) +
stat_bin() +
geom_text(data = labs, aes(x = species, y = value, label = value, vjust = -0.5)) +
facet_wrap(~ lvl)
最後の式をラップするとsuppressWarnings
、警告の数の概要が表示されます。議論のために、これは受け入れられない (ただし、非常に正直で正しい) としましょう。ggplot2 オブジェクトを印刷するときに警告を (完全に) 抑制するにはどうすればよいでしょうか。
ベストアンサー1
オブジェクトの作成ではなく、呼び出しsuppressWarnings()
を囲む必要があります。print()
ggplot()
R> suppressWarnings(print(
+ ggplot(mydf, aes(x = species)) +
+ stat_bin() +
+ geom_text(data = labs, aes(x = species, y = value,
+ label = value, vjust = -0.5)) +
+ facet_wrap(~ lvl)))
R>
最終的なプロットをオブジェクトに割り当ててから、 を実行する方が簡単かもしれませんprint()
。
plt <- ggplot(mydf, aes(x = species)) +
stat_bin() +
geom_text(data = labs, aes(x = species, y = value,
label = value, vjust = -0.5)) +
facet_wrap(~ lvl)
R> suppressWarnings(print(plt))
R>
この動作の理由は、警告はプロットが実際に描画されたときにのみ生成され、プロットを表すオブジェクトが作成されたときには生成されないためです。Rは対話型の使用中に自動的に印刷するので、
R> suppressWarnings(plt)
Warning message:
Removed 1 rows containing missing values (geom_text).
は機能しません。なぜなら、実際には を呼び出しているprint(suppressWarnings(plt))
のに対し、
R> suppressWarnings(print(plt))
R>
suppressWarnings()
呼び出しから発生する警告をキャプチャできるため、機能しますprint()
。