2

我想pdf使用函数打开并命名绘图设备;在调用设备打开函数的级别上绘制它;然后使用dev.off()在该级别给出的命令关闭它——这可能R吗?

背景

我经常pdf从 R 打印一个 to,因此做了很多:

pdf(file.path(plotPATH, pdfName), width = Wwidth, height = Hheight)
plot( ...)
dev.off()

为了促进懒惰,我做了一个功能来打开情节设备并保存我的pdf(file.path(plotPATH ...))样板。

我创建的功能是:

pdfMk <- function(pdfName, Wwidth = 480, Hheight = 480) 
{ 
    pdf(file.path(plotPATH, pdfName), width = Wwidth, height = Hheight)
}

我想这样称呼它:

pdfMk("foo.pdf")
plot(...)
dev.off()

问题是这不起作用......输出是pdf具有适当名称和适当位置的 a,但它始终为空白。

我想我可能对闭包(或其他东西)有问题,所以我尝试在函数调用结束之前单步执行pdfMk函数debug并创建绘图,但输出仍然是空白 pdf(在任何一种情况下都没有错误消息)。

这可能吗?如果是这样,我该如何实现我的目标?

4

2 回答 2

2

您的代码按预期工作,但默认值除外。

来自?pdf

width, height:图形区域的宽度和高度,以英寸为单位。默认值为 7。

您正在创建大小为 40 x 40 英尺的文档。

于 2013-11-14T00:04:17.530 回答
1

只是出于好奇:你为什么不在你dev.off()的函数中包含绘图和?就像是

plotpath=file.path("C:","temp")

pdf_wrapper=function(plot_expression,pdfName,plotpath,Wwidth=7,Hheight=7) {
    pdf(file.path(plotpath,pdfName),width=Wwidth,height=Hheight)
    plot_expression
    dev.off()
    Sys.sleep(0.5)
}

pdf_wrapper(plot(c(1,2),c(1,2),type='l',col='blue',lty=2),"test.pdf",plotpath)

顺便说一句:在这种情况下,我总是Sys.sleep(...)在最后加入。如果随后调用pdf_wrapper. 我不知道这是由于 R 还是 RStudio,但有时当我不包括等待时间时,我会收到损坏的 pdf 文件。似乎可以确保有足够的时间正确打开设备。但是,我正在使用ggplot2graphics::plot这可能不是问题。

于 2013-11-14T01:44:45.690 回答