6

我将一个包含一些ggplot2对象的列表导出到一个.RDS文件中,该文件是从 R 3.6.1 会话生成的。然后,尝试将其导入 R 4.0.0 会话并收到以下错误:

Error in identicalUnits(x) : 
  old version of unit class is no longer allowed

我可以读取这些绘图并将其导入到 R 对象中,但不能绘图。他们实际上拥有(数据、图层、比例映射......)中的所有数据,但ggplot2没有绘制它们。

有什么办法吗?你们中有人遇到过这个问题吗?ggplot2是否有计划更新库以便我们可以导入旧版本的图?希望你能帮我找到解决方案,或者至少是一个补丁。谢谢!

4

4 回答 4

2

通常不鼓励将 ggplot2 对象保存到.Rds文件中,因为如果 ggplot2 或(在这种情况下)R 升级到下一个版本,即使它是次要版本,也绝对不能保证它们仍然可以工作。ggplot2 对象包含大量可执行代码(闭包)以及内部数据结构,当我们使用一个 ggplot2 版本生成绘图然后尝试使用另一个版本打印时,这些通常会不同步。

保存 ggplot2 对象的另一个问题.Rds是整个 R 环境也被保存,因此.Rds如果您碰巧将大量数据加载到会话中,您的文件可能会崩溃。

跨版本保留绘图的唯一两种安全方法是 1. 保存原始数据和生成绘图的代码或 2. 将绘图输出保存为.png.pdf等。

于 2020-05-29T04:18:09.017 回答
1

在全局设置自定义主题后,我遇到了同样的问题。我注意到,如果我用“完成 = F”重新定义主题,然后设置新主题,则绘图工作正常。不幸的是,还没有更好的解决方案。这也发生在新编码的 ggplot 对象上,即不是从 .Rds 文件中读取的。

于 2020-06-14T11:08:25.613 回答
0

我也遇到了这个问题,并且能够通过更改加载情节的主题来解决它。

g <- readRDS(my_plots_file_path)
g$theme <- ggplot2::theme_minimal()

我认为这是因为那是unit我的情节中所有变量实例存在的地方。

于 2021-08-11T17:30:38.083 回答
-2

我是 R 的新手,遇到了同样的问题。对我有用的是在新版本中运行图形脚本,然后它们正常绘图。

于 2020-09-16T07:32:27.663 回答