Как подавлять предупреждения при построении графика с помощью ggplot
При передаче отсутствующих значений в ggplot это очень мило и предупреждает нас, что они присутствуют. Это приемлемо в интерактивном сеансе, но при написании отчетов вы не получаете заглушки с предупреждениями, особенно если их много. В приведенном ниже примере отсутствует одна метка, которая выдает предупреждение.
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)
![enter image description here]()
Если мы обернем suppressWarnings
вокруг последнего выражения, мы получим краткое изложение того, сколько предупреждений было. Ради споров, скажем, что это неприемлемо (но действительно очень честно и правильно). Как (полностью) подавлять предупреждения при печати объекта ggplot2?
Ответы
Ответ 1
Более целевым сюжетным подходом было бы добавить 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)
Ответ 2
Вам нужно 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()
.
Ответ 3
В вашем вопросе вы упомянете о написании отчетов, поэтому лучше установить глобальный уровень предупреждения:
options(warn=-1)
по умолчанию:
options(warn=0)