61

欠損値を 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オブジェクトを印刷するときに警告を(完全に)抑制する方法は?

4

3 に答える 3

60

オブジェクトの作成ではなく、呼び出しを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()ます。

于 2012-11-08T09:57:24.677 に答える
57

よりターゲットを絞ったプロットごとのアプローチはna.rm=TRUE、プロット呼び出しに追加することです。例えば:

  ggplot(mydf, aes(x = species)) + 
      stat_bin() + 
      geom_text(data = labs, aes(x = species, y = value, 
                                 label = value, vjust = -0.5), na.rm=TRUE) +
      facet_wrap(~ lvl)
于 2012-11-08T12:52:22.920 に答える
30

あなたの質問では、レポートの作成について言及しているため、グローバルな警告レベルを設定することをお勧めします。

options(warn=-1)

デフォルトは次のとおりです。

options(warn=0)
于 2012-11-08T09:58:07.357 に答える