gpt4 book ai didi

R 需要重新启动 RStudio 以使用 dev.copy() 和 dev.off() 查看并保存在文件中

转载 作者:行者123 更新时间:2023-12-02 00:45:59 24 4
gpt4 key购买 nike

我正在尝试创建一个绘图并最终将其保存为一个文件。但是因为我正在做很多更改并且想测试一下,所以我希望能够同时查看和保存情节。我看过this page做我想做的事,但在我的系统中,它似乎没有按预期工作。

这是我的代码:

png('Save.png')

sample.df <- data.frame(group = c('A','B','A','C','B','A','A','C','B','C','C','C','B'),
X = c(2,11,3,4,1,6,3,7,5,9,10,2,8),
Y = c(3,8,5,2,7,9,3,6,6,1,3,4,10))

plot(Y ~ X, data = sample.df)

dev.copy(png, 'Save.png')
dev.off()

有几个问题(我是 R 的新手,所以我可能完全遗漏了一些东西):

(1) 当我使用 png() 时,我无法在 RStudio 中查看绘图,所以我使用了 dev.copy() 但它不允许我在 R studio 中查看我的绘图

(2) 即使在我使用 dev.off() 之后,我也无法查看保存的文件,直到我关闭 RStudio(说“Windows 照片查看器无法打开这张图片,因为图片正在另一个程序中编辑”) .每次都需要重启,很不方便。

我做错了什么?如何在每次不重新启动 RStudio 的情况下查看和查看保存的文件?提前致谢!

添加

根据 Love Tätting 的评论,当我运行 dev.list() 时,这就是我得到的结果。

> png('Save.png')
>
> sample.df <- data.frame(group = c('A','B','A','C','B','A','A','C','B','C','C','C','B'),
+ X = c(2,11,3,4,1,6,3,7,5,9,10,2,8),
+ Y = c(3,8,5,2,7,9,3,6,6,1,3,4,10))
>
> plot(Y ~ X, data = sample.df)
>
> dev.copy(png, 'Save.png')
png
3
> dev.off()
png
2
> dev.list()
png
2
> dev.off()
null device
1
> dev.list()
NULL

为什么我没有得到 RStudioGD?

最佳答案

RStudio 有自己的设备“RStudioGD”。您可以使用 dev.list() 查看它,默认情况下它是第一个也是唯一一个。

R 对渲染和后端解耦的设计是通过设备的抽象。您可以使用哪些取决于平台和环境。 dev.list() 显示当前设备的堆栈。

如果我对你的问题的理解正确,你想先在 RStudio 中显示图形,然后再决定是否要保存它。根据您保存图像的频率,您可以使用 RStudio 绘图 Pane 中的“导出”按钮并手动保存。

否则,您选择尝试复制它对我来说也是显而易见的。

据我所知,R 中的设备抽象不允许将设备封装为对象,因此例如可以将其作为执行实际绘图的函数的参数。由于 dev.set() 将索引作为参数,因此将索引作为参数传递将取决于设备堆栈的状态。

我自己还没有想出一个干净的解决方案,有时会反驳说通过调用某个设备来包围绘图渲染代码并在之后立即保存它,并根据全局切换设备。

因此,如果可以的话,请使用 RStudios 导出功能,否则抽象将需要维护全局设备堆栈的状态并对其状态进行广泛测试,因为它是全局的并且您无法将 plot 调用指向某个特定设备,它只是绘制到当前设备(据我所知)。


OP评论后编辑

如果您在 dev.off 后无法观看文件,但还需要退出 RStudio,这似乎是您遇到的一些不同行为。对于某些类型的绘图框架,需要在图形对象上调用 print 以将其实际打印到文件中。也许这是由 RStudio 在关闭时作为打开设备的正常拆卸程序的一部分完成的?在这种情况下,如果您在退出 RStudio 之前强行查看其内容,则该文件应该为空。有时有用的另一件事是调用 dev.off 两次。我不知道为什么,但有时创建的设备比我预期的要多。完成dev.off后,dev.list显示什么?


OP编辑后编辑

我看得出来,png(); dev.copy(); dev.off()。这将使您打开的设备多于关闭的设备。您仍然会打开第一个打开的图形设备,正如您在执行 list 时所看到的那样。您可以简单地删除 dev.copy()。图像将保存在 dev.off() 上,并且应该能够从文件系统中打开。

至于为什么看不到 RStudio 图形设备,我不太确定。可能是其他代码扰乱了您的设备堆栈。我会检查一个干净的 session 是否存在,以确保其他代码不会篡改设备堆栈。从 RStudio 论坛和其他 SO 问题来看,RStudio 中似乎存在与绘图 Pane 相关的问题,这些问题在将 RStudio 更新到最新版本后已得到解决。如果这对您来说是一个可行的解决方案,我会尝试的。

关于R 需要重新启动 RStudio 以使用 dev.copy() 和 dev.off() 查看并保存在文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43812150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com