R 无法通过if语句中的ggplot2创建PDF

R 无法通过if语句中的ggplot2创建PDF,r,if-statement,pdf,ggplot2,graphics,R,If Statement,Pdf,Ggplot2,Graphics,考虑一个最小的示例:使用ggplot2生成一个空绘图,并将其放入PDF文件中。通常人们会这样做 pdf() ggplot() dev.off() 它的工作原理与预期一致。但是,当您将这些语句包装到if语句中时,生成的PDF文件将损坏 if (TRUE) { pdf() ggplot() dev.off() } 这个问题已在Windows 10和macOS Mojave上复制。我使用的是R的最新版本 $ R --version R version 3.6.0 (201

考虑一个最小的示例:使用ggplot2生成一个空绘图,并将其放入PDF文件中。通常人们会这样做

pdf()
ggplot()
dev.off()
它的工作原理与预期一致。但是,当您将这些语句包装到if语句中时,生成的PDF文件将损坏

if (TRUE) {
    pdf()
    ggplot()
    dev.off()
}

这个问题已在Windows 10和macOS Mojave上复制。我使用的是R的最新版本

$ R --version
R version 3.6.0 (2019-04-26) -- "Planting of a Tree"
Copyright (C) 2019 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin18.6.0 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under the terms of the
GNU General Public License versions 2 or 3.
For more information about these matters see
https://www.gnu.org/licenses/.

要使用
pdf
jpg
函数保存
ggplot
对象,必须显式打印ggplot

if (TRUE) { 
  pdf() 
  print(ggplot()) 
  dev.off()
}
这在7.22中有说明,为什么晶格/网格图形不起作用?

最可能的原因是您忘记告诉R显示图形。格函数 例如xyplot()创建图形对象,但不显示它( ggplot2图形和S-PLUS中的网格图形也是如此)。这个 graph对象的print()方法生成实际显示。什么时候 在命令行中以交互方式使用这些函数,结果 是自动打印的,但在source()中或在您自己的函数中 您需要一个显式的print()语句

因此,即使在没有条件语句或循环的情况下(
source
with
echo=TRUE
将保存绘图),如果只保存脚本,它也不会保存


我个人更喜欢使用
ggsave
功能,因为它看起来更灵活

if (TRUE) { 
  ggplot() 
  ggave(filename = "plot.pdf")
}

使用
ggsave
保存
ggplot
-我认为这应该是典型的方法。我认为这通常发生在缺少
dev.off()
时。可能来自
ifelse
语句之前执行的
pdf()
。@Suren使用
ggsave
有效!但是,在if语句中有一个
dev.off()
。顺便说一句,在每次实验之前,我都有
rm(lisy=ls())
来确保环境干净。我认为你必须做这样的事情
p是的,只有
{}
中的最后一句话(这里
dev.off()
)被隐式打印,所以你需要显式打印:
if(TRUE){pdf();print(ggplot());dev.off()