如何将R列表对象保存到数据库?

时间:2012-07-24 13:46:39

标签: database r nosql

假设我有一个R对象列表,它们本身就是列表。每个列表都有一个定义的结构:数据,适合数据的模型和用于识别数据的一些属性。一个例子是特定国家某些经济指标的时间序列。所以我的列表对象有以下元素:

data - 经济指标的历史时间序列

country - 该国家/地区的名称,例如美国

name - 指标名称,例如GDP

model - auto.arima以合适的格式找到的ARIMA订单,这也可能是一个列表。

这只是一个例子。正如我所说的,假设我将一些这样的对象组合成一个列表。我想将它保存为一些合适的格式。显而易见的解决方案就是使用save,但这对于大量对象来说不能很好地扩展。例如,如果我只想检查对象的子集,我需要将所有对象加载到内存中。

如果我的数据是data.frame,我可以将其保存到数据库中。如果我想使用特定的数据子集,我会使用SELECT并依靠数据库来提供所需的子集。在这方面,SQLite对我很有帮助。是否可以使用像MongoDB这样的奇特数据库为我描述的列表对象复制这个?或者我应该只考虑如何将我的列表转换为几个相关的表?

我的动机是能够轻松生成适合模型的各种报告。我可以编写一些函数来生成给定对象的一些报告,然后在我的对象列表中使用lapply。理想情况下,我希望将此过程并行化,但这是另一个问题。

3 个答案:

答案 0 :(得分:4)

我想我之前曾经解释过这个基础知识 - 它的主旨是

  • R内置完整的序列化和反序列化支持,因此您实际上可以将任何现有的R对象转换为二进制或文本序列化。我的摘要包使用它来使用不同的函数将序列化转换为哈希

  • R拥有您需要的所有数据库连接。

现在,合适的格式和数据库架构......将取决于您的具体情况。但是(像往常一样)R中没有任何东西阻止你:)

答案 1 :(得分:1)

此问题已停用很长时间。由于我最近有类似的担忧,我想添加我发现的信息。我在这个问题中认识到这三个要求:

  • 将数据存储在合适的结构中
  • 在大小和访问时间方面的可扩展性
  • 有效读取数据子集的可能性

除了使用关系数据库的选项之外,还可以使用旨在存储大量可能的大对象的HDF5文件格式。选择取决于数据类型和访问它的预期方式。

如果符合以下条件,则应优先考虑关系数据库:

  • 原子数据项是小型的
  • 不同的数据项具有相同的结构
  • 没有预期数据将被读出的子集
  • 方便地将数据从一台计算机传输到另一台计算机不是问题,或者需要数据的计算机可以访问数据库。

如果符合以下条件,则首选HDF5格式:

  • 原子数据项本身就是大对象(例如矩阵)
  • 数据项是异质的,不可能将它们组合成表格,如表示
  • 大部分时间以预先知道的组读出数据
  • 将数据从一台计算机移动到另一台计算机不需要太多努力

此外,人们可以区分relationalhierarchial关系,后者包含在前者中。在HDF5文件中,信息块可以以分层方式排列,例如:

/Germany/GDP/model/...
/Germany/GNP/data
/Austria/GNP/model/...
/Austria/GDP/data

Bioconductor上提供了用于处理HDF5文件的rhdf5包。有关HDF5格式的一般信息可用here

答案 2 :(得分:0)

不确定它是否相同,但我对时间序列对象有一些很好的经验:

str() 

也许你可以调查一下。