【发布时间】:2020-06-23 13:49:12
【问题描述】:
我有一个列表 (eulerr.list),其中包含可以使用 eulerr 绘制欧拉图的数据框。
我想为列表中的每个数据框绘制并保存欧拉图。为此我写了如下代码:
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)时,我得到了我期望的文件,但所有文件都已损坏(无法在我的 Mac (OSX 10.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 文件?
【问题讨论】:
-
你确定不应该是
names(eulerr.list)[j]? -
当我尝试这样做时,我仍然遇到同样的问题
-
我认为您需要提供一个最小的可重现示例。
-
这有效:
for (i in 2:3) { pdf(file=paste0(i, ".pdf")); plot(mtcars[[i]], main=names(mtcars)[i]); dev.off(); },所以它一定与您的数据有关。是否使用了任何非基础包? (我推断eulerr,请明确说明您使用的任何/所有关于SO的问题。)您是否尝试使用width=/height=扩展pdf的尺寸?也许这是一个情节大小的事情。 -
@r2evans 我看到了。我可以检查
plot方法,但是(a)我不想安装该软件包,并且(b)没有可重现的示例,我无法确定实际调用了哪个方法。