如何将多个R对象与其他数据保存到文件中?

4
这是我正在构建的一个工具,所以我的解决方案不能是临时性的。我想把一个ggplot对象保存到日志文件中,该文件包含了许多其他信息。然后,我会使用很多这些日志文件来制作所有ggplots的组合图。我尝试过将图片保存为.png格式,然后在R中将它们组合起来,但是当从图像文件组合它们时,质量显著降低。有什么想法吗?
我不想将它们保存为单独的.Rdata文件,因为我希望所有信息都包含在日志文件中。我的唯一选择是保存用于构造ggplot的数据框,并在以后重建它吗?

ggplot2 grob的格式在R中非常独特,即使是对于小图形,它也是一个相当复杂(且庞大)的对象。虽然将grob编码为可以存储在日志文件(jsonlite)中的内容可能是可行的,但我怀疑对象中可能存在内部引用,这会使该部分变得困难。缺乏更多上下文的情况下,我建议您使用术语“日志文件”可能有些牵强,因为它们通常(并不总是)是ASCII或至少是非二进制的。那么考虑一个日志目录,每个文件都是一个条目(以及一个.rda文件)。 - r2evans
1
谢谢提供这些信息!我之前没有考虑到ggplot2对象可能会很大。我认为你说得很有道理。实际上,把所有的信息写入.rda文件并将其用作我的日志文件可能更有意义!非常感谢。 - thekuhninator
一如既往,这取决于具体情况,但如果你有很多层、很多个体数据点等,那么它们会累加起来。一个简单的 mtcars 散点图只有 13KiB,所以并不是特别大,但是虽然某个东西可能很“便宜”,但许多东西加在一起就不再“便宜”了。 - r2evans
有道理!谢谢! - thekuhninator
1个回答

7

我不确定为什么要将内容嵌入日志文件中,但是保存 R 对象有两个选项。

选项1. 一次性保存多个内存对象。

save(ggplot1object, dataframe2, dataframe3, file = "location.filename.Rdata")

那么您可以

load("location.filename.RData") 

选项2:创建一个列表并保存该列表,所有3个对象将被加载到内存中。

save(list(ggplot1object, dataframe2, dataframe3), "location.filename.Rdata")

那么您就可以

load("location.filename.Rdata")

单个列表项包含 3 个不同部分的内容将被加载到环境中。这些可以是 ggplot 输出项,如 p1p2 等,代表不同的绘图对象。


谢谢您的回复。我想点赞,但这是我的第一篇帖子 :(. 将所有信息嵌入日志文件中的原因是将所有信息包含在一个文件中,因此当聚合工具递归搜索所有日志文件时,它只需要担心一种类型的文件。从软件工程的角度来看,我认为这是最清洁的解决方案。我希望这有意义。我可能被迫执行此操作或将数据按原样写入日志文件,然后压缩该文件。 - thekuhninator
附注:迭代地向 .rda 文件添加内容可能会随着数据量的增加而变慢。如果您知道您只是在追加数据,并且不会使用现有的 .rda 文件中的所有内容,那么将每个 grob 写入新的 .rda 文件并仅在打算组合它们时 load 它们可能会获得更好的性能。这只是一个想法。 - r2evans
我必须使用 "file=mydata.Rdata" 指定保存路径。 - mluerig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接