我将包含一些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
是否有计划更新库,以便我们可以导入旧版本的图?希望你能帮我找到解决方案,或者至少是一个补丁。谢谢!
通常不鼓励将 ggplot2 对象保存到.Rds
文件中,因为绝对不能保证如果 ggplot2 或(在这种情况下(R 升级到下一个版本,即使它是次要版本,它们仍然有效。 ggplot2 对象包含大量的可执行代码(闭包(以及内部数据结构, 每当我们使用一个 ggplot2 版本生成一个绘图,然后尝试使用另一个版本打印时,这些通常会不同步。
将 ggplot2 对象保存到.Rds
的另一个问题是,整个 R 环境也会保存,因此,如果您碰巧将大量数据加载到会话中,您的.Rds
文件可能会爆炸。
跨版本保留图的唯一两种安全方法是 1. 保存生成图的原始数据和代码或 2. 将图输出保存为.png
、.pdf
等。
我也遇到了这个问题,并且能够通过更改加载情节的主题来解决它。
g <- readRDS(my_plots_file_path)
g$theme <- ggplot2::theme_minimal()
我认为这是因为这是我的情节中存在unit
变量的所有实例的地方。
我遇到了同样的问题,这是我全局设置自定义主题后发生的。 我注意到,如果我用"complete = F"重新定义主题,然后设置新主题,则绘图工作正常。不幸的是,还没有更好的解决方案。 新编码的 ggplot 对象也发生这种情况,即不是从 .RDS 文件。
我是 R 的新手,遇到了同样的问题。对我有用的是在新版本中运行图形的脚本,然后它们正常绘制。