4

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

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

country- 国家名称,例如美国

name- 指标名称,例如 GDP

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

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

如果我的数据是一个,data.frame 我可以将它保存到数据库中。如果我想处理特定的数据子集,我会使用 SELECT 并依靠数据库来提供所需的子集。SQLite 在这方面为我提供了很好的帮助。是否可以使用 MongoDB 等花哨的数据库为我描述的列表对象复制这个?或者我应该简单地考虑如何将我的列表转换为几个相关的表?

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

4

3 回答 3

4

我想我以前曾在某个地方解释过这个基础知识——它的要点是

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

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

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

于 2012-07-24T13:59:48.750 回答
1

这个问题已经很久没有活动了。由于我最近有类似的担忧,因此我想添加我发现的信息。我在问题中认识到这三个要求:

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

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

在以下情况下应优先使用关系数据库:

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

如果出现以下情况,应首选 HDF5 格式:

  • 原子数据项本身就是大对象(例如矩阵)
  • 数据项是异构的,不可能将它们组合成一个类似表的表示
  • 大多数情况下,数据是按预先知道的分组读出的
  • 将数据从一台计算机移动到另一台计算机应该不需要太多努力

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

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

Bioconductorrhdf5上提供了用于处理 HDF5 文件的软件包。有关 HDF5 格式的一般信息可在此处获得。

于 2014-02-08T20:49:47.637 回答
0

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

str() 

也许你可以调查一下。

于 2012-07-24T17:17:55.897 回答