我有一个列表(eulerr.list),它包含可以用eulerr绘制欧拉图的数据帧。我想为列表中的每个数据帧绘制和保存Euler图。为此,我编写了以下代码:
for (j in 1: length(eulerr.list)) {
pdf(file=paste0("output/","triple_","eulerr_",names(eulerr.list[j]),".pdf"))
plot(eulerr.list[[j]],
fills = c("red", "forestgreen", "mediumorchid"),
quantities = TRUE,
alpha = 0.5,
labels = c("A",
"B",
names(eulerr.list[j])),
adjust_labels = TRUE)
dev.off()
}当我运行循环(RStudio版本1.3.959)时,我得到了我期望的文件,但是所有的文件都被损坏了(不能被我的打开(OSX10.12.6))。当循环完成时,没有错误消息,并且Rstudio返回一个空提示符。当我将值1手动分配给j并在循环中运行代码时:
pdf(file=paste0("output/","triple_","eulerr_",names(eulerr.list[j]),".pdf"))
plot(eulerr.list[[j]],
fills = c("red", "forestgreen", "mediumorchid"),
quantities = TRUE,
alpha = 0.5,
labels = c("A",
"B",
names(eulerr.list[j])),
adjust_labels = TRUE)
dev.off()然后正确生成文件(可以在预览中查看),RStudio返回以下内容:
> dev.off()
RStudioGD
2为什么for循环会生成损坏的PDF文件?
发布于 2020-06-25 18:11:08
这里发生的事情是,plot.euler()返回一个"eulergram"对象。要在当前设备上实际绘制此图,必须调用print.eulergram() (或plot.eulergram())方法,但这并不是因为调用位于for循环内。当您交互调用plot()时,返回的对象实际上有其print()方法隐式调用。这是完全相同的问题,人们有or图或格。
您需要做的是从plot()中保存对象并在其上调用print() (或plot()),如下所示:
for (j in 1: length(eulerr.list)) {
pdf(file=paste0("output/","triple_","eulerr_",names(eulerr.list[j]),".pdf"))
p <- plot(eulerr.list[[j]],
fills = c("red", "forestgreen", "mediumorchid"),
quantities = TRUE,
alpha = 0.5,
labels = c("A",
"B",
names(eulerr.list[j])),
adjust_labels = TRUE)
print(p)
dev.off()
}https://stackoverflow.com/questions/62536305
复制相似问题