我为一个项目制作了不同的情节(超过一百个),我没有在路上捕捉它们(是的,它很糟糕,我知道)。现在,我需要立即保存它们,但不再运行我的脚本(这需要几个小时)。在Rstudio中有没有办法这样做?
编辑:所有情节都已存在,我不想再次运行它们。
答案 0 :(得分:13)
在RStudio中,每个会话都有一个临时目录,可以使用tempdir()
获得该目录。在该临时目录中,还有另一个目录,该目录始终以"rs-graphics"
开头,并包含所有另存为".png"
文件的图。因此,要获取".png"
文件的列表,您可以执行以下操作:
plots.dir.path <- list.files(tempdir(), pattern="rs-graphics", full.names = TRUE);
plots.png.paths <- list.files(plots.dir.path, pattern=".png", full.names = TRUE)
现在,您可以将这些文件复制到所需的目录,如下所示:
file.copy(from=plots.png.paths, to="path_to_your_dir")
其他功能:
您会注意到,.png
文件名是自动生成的(例如0078cb77-02f2-4a16-bf02-0c5c6d8cc8d8.png
)。因此,如果要根据RStudio中.png
文件的打印顺序编号,可以按照以下步骤进行操作:
plots.png.detials <- file.info(plots.png.paths)
plots.png.detials <- plots.png.detials[order(plots.png.detials$mtime),]
sorted.png.names <- gsub(plots.dir.path, "path_to_your_dir", row.names(plots.png.detials), fixed=TRUE)
numbered.png.names <- paste0("path_to_your_dir/", 1:length(sorted.png.names), ".png")
# Rename all the .png files as: 1.png, 2.png, 3.png, and so on.
file.rename(from=sorted.png.names, to=numbered.png.names)
希望有帮助。
答案 1 :(得分:4)
虽然这段讨论已经暂停了一段时间,但有些人,比如我自己,仍然遇到同样的问题,其他解决方案似乎甚至没有得到实际问题。< / p>
所以,亲自动手。您的绘图历史记录将保存在名为.SavedPlots
的变量中。您可以直接访问它,将其分配给代码中的另一个变量,也可以从绘图窗口中执行后者。
# ph for plot history
ph <- .SavedPlots
在R 3.4.2中,我可以索引ph
来重现设备中的相应图。以下内容相当简单:
ph[index_of_plot_in_history]
。示例:
for(i in 1:lastplot) {
png('plotname.png')
print(ph[i])
dev.off()
}
注意:有时候由于编程不好而不会发生这种情况。例如,我使用MICE包来估算具有大量变量的许多数据集,并绘制this paper的4.3节中所示的绘图。问题是,每个绘图只显示了三个变量,如果我在代码中使用了png设备,则只保存每个数据集的最后一个绘图。但是,如果将图打印到窗口,则会记录每个数据集的所有图。
答案 2 :(得分:1)
如果您的绘图是3d,则可以拍摄所有绘图的快照并将其另存为.png文件格式。
par(mfrow)
否则,最好的方法是使用plotsPath = "../Plots/allPlots.pdf"
pdf(file=plotsPath)
for (x in seq(1,100))
{
par(mfrow = c(2,1))
p1=rnorm(x)
p2=rnorm(x)
plot(p1,p2)
}
dev.off()
功能创建一个多面板绘图窗口。请尝试以下
png
您还可以使用bmp
,tiff
,jpeg
和pdf
函数代替AREA.OPEN A000 protocol.lst ; area will be saved in 'protocol.lst'
DO test
...
AREA.CLOSE A000 ; all messages will be saved
。您可以阅读它们的优点和缺点,并选择您认为有利于您的需求。
答案 3 :(得分:0)
我不确定Rstudio如何打开绘制绘图的设备,但我猜它使用dev.new()
。在这种情况下,保存所有打开的图形的一种快速方法是遍历所有设备并使用dev.print
进行写入。
类似的东西:
lapply(dev.list(),function(d){dev.set(d);dev.print(pdf,file=file.path(folder,paste0("graph_",d,".pdf"))})
其中folder
是您要存储图形的文件夹的路径(例如,如果您在Linux中并且想要将所有图形存储在主文件夹中,则可以是folder="~"
)。
答案 4 :(得分:-1)
如果您输入以下功能,则以下所有内容将保存在文档中:
pdf("nameofthedocument.pdf")
plot(x~y)
plot(...
dev.off()
你也可以使用tiff(),jpg()...参见?pdf