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

Ber*_*rdo 7 r ggplot2 r-4.0.0

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

Error in identicalUnits(x) : 
  old version of unit class is no longer allowed
Run Code Online (Sandbox Code Playgroud)

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

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

Cla*_*lke 3

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

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

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