假设我有一个R对象列表,它们本身就是列表。每个列表都有一个定义的结构:数据,适合数据的模型和用于识别数据的一些属性。一个例子是特定国家某些经济指标的时间序列。所以我的列表对象有以下元素:
data
- 经济指标的历史时间序列
country
- 该国家/地区的名称,例如美国
name
- 指标名称,例如GDP
model
- auto.arima
以合适的格式找到的ARIMA订单,这也可能是一个列表。
这只是一个例子。正如我所说的,假设我将一些这样的对象组合成一个列表。我想将它保存为一些合适的格式。显而易见的解决方案就是使用save
,但这对于大量对象来说不能很好地扩展。例如,如果我只想检查对象的子集,我需要将所有对象加载到内存中。
如果我的数据是data.frame
,我可以将其保存到数据库中。如果我想使用特定的数据子集,我会使用SELECT并依靠数据库来提供所需的子集。在这方面,SQLite对我很有帮助。是否可以使用像MongoDB这样的奇特数据库为我描述的列表对象复制这个?或者我应该只考虑如何将我的列表转换为几个相关的表?
我的动机是能够轻松生成适合模型的各种报告。我可以编写一些函数来生成给定对象的一些报告,然后在我的对象列表中使用lapply
。理想情况下,我希望将此过程并行化,但这是另一个问题。
答案 0 :(得分:4)
我想我之前曾经解释过这个基础知识 - 它的主旨是
R内置完整的序列化和反序列化支持,因此您实际上可以将任何现有的R对象转换为二进制或文本序列化。我的摘要包使用它来使用不同的函数将序列化转换为哈希
R拥有您需要的所有数据库连接。
现在,合适的格式和数据库架构......将取决于您的具体情况。但是(像往常一样)R中没有任何东西阻止你:)
答案 1 :(得分:1)
此问题已停用很长时间。由于我最近有类似的担忧,我想添加我发现的信息。我在这个问题中认识到这三个要求:
除了使用关系数据库的选项之外,还可以使用旨在存储大量可能的大对象的HDF5
文件格式。选择取决于数据类型和访问它的预期方式。
如果符合以下条件,则应优先考虑关系数据库:
如果符合以下条件,则首选HDF5格式:
此外,人们可以区分relational
和hierarchial
关系,后者包含在前者中。在HDF5文件中,信息块可以以分层方式排列,例如:
/Germany/GDP/model/...
/Germany/GNP/data
/Austria/GNP/model/...
/Austria/GDP/data
Bioconductor上提供了用于处理HDF5文件的rhdf5
包。有关HDF5格式的一般信息可用here。
答案 2 :(得分:0)
不确定它是否相同,但我对时间序列对象有一些很好的经验:
str()
也许你可以调查一下。