0

我正在使用 ggplot2 生成 pdf 报告。代码看起来像这样

pdf()
 for (){
   p <- ggplot(..)
   print(p)
 } 
dev.off()

有时由于数据质量 ggplot 无法生成绘图。可能有多种原因,我们不想检查所有可能的数据组合是否失败。我们只是想检查 ggplot 是否失败 - 并继续。这就是我想出的-可行,但是存在一些问题。

library(ggplot2)
p <- ggplot(mtcars, aes(wt, mpg)) +
     geom_point()
p.bad <- ggplot(mtcars, aes(wt, as.character(mpg))) +
  geom_point() +
  scale_y_continuous()

pdf()
a <- try(print(p), silent = TRUE)  # double printing
if (class(a)!='try-error'){
  print(p)
}
b <- try(print(p.bad), silent = TRUE)
if (class(b)!='try-error'){
  print(p.bad)
}
dev.off()

try(print) - 如果没有错误,则生成图表。有没有办法阻止它?这可能是最好的解决方案。如果我们执行以下操作 - 没有重复打印,但第二次尝试(打印)会生成空白页。

pdf()
a <- try(print(p), silent = TRUE)
b <- try(print(p.bad), silent = TRUE)
dev.off()

是否有另一种方法可以确定 ggplot 是否会产生错误?

4

1 回答 1

2

我建议使用ggsave

ttt <- function() {
  require(ggplot2)
  p.bad <- ggplot(mtcars, aes(wt, as.character(mpg))) +
    geom_point() +
    scale_y_continuous()

  a <- try(ggsave("test.pdf",p.bad))
  return("test")
}

ttt()
# Saving 12.9 x 9.58 in image
# Error : Discrete value supplied to continuous scale
# [1] "test"
于 2013-09-04T18:32:48.563 回答