我为一个项目做了不同的情节(超过一百个),我没有在路上捕捉它们(是的,它很糟糕,我知道).现在,我需要立即保存它们,但不再运行我的脚本(这需要几个小时).有没有办法在Rstudio内这样做?
编辑:所有的情节都已存在,我不想再次运行它们.
Tee*_*Kea 15
在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)
Run Code Online (Sandbox Code Playgroud)
现在,您可以将这些文件复制到所需的目录,如下所示:
file.copy(from=plots.png.paths, to="path_to_your_dir")
Run Code Online (Sandbox Code Playgroud)
附加功能:
正如您将注意到的,.png文件名是自动生成的(例如0078cb77-02f2-4a16-bf02-0c5c6d8cc8d8.png).因此,如果您想.png根据RStudio中的绘图顺序对文件进行编号,您可以按如下方式进行:
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)
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你.
尽管这个讨论已经有一段时间不活跃了,但有些人,比如我自己,仍然遇到了同样的问题,而其他解决方案似乎并没有真正理解实际的问题是什么。
所以,动手吧。您的绘图历史记录将保存在名为 的变量中.SavedPlots。您可以直接访问它,将其分配给代码中的另一个变量,或者从绘图窗口执行后者。
# ph for plot history
ph <- .SavedPlots
Run Code Online (Sandbox Code Playgroud)
在 R 3.4.2 中,我可以索引ph以在设备中重现相应的绘图。接下来的内容相当简单:
ph[index_of_plot_in_history]。例子:
for(i in 1:lastplot) {
png('plotname.png')
print(ph[i])
dev.off()
}
Run Code Online (Sandbox Code Playgroud)
注意:有时由于编程不当而不会发生这种情况。例如,我使用 MICE 包来估算具有大量变量的许多数据集,并按本文第 4.3 节所示进行绘图。问题是,每个图仅显示三个变量,如果我在代码中使用 png 设备,则只会保存每个数据集的最后一个图。但是,如果将图打印到窗口,则将记录每个数据集的所有图。