无法将使用 R 3.x 创建的 ggplot2 对象打印到从 RDS 文件导入的 R 4.x 中



我将包含一些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 的新手,遇到了同样的问题。对我有用的是在新版本中运行图形的脚本,然后它们正常绘制。

最新更新