我创建了一个data.table(类似于data.frame -请参阅下面的注释)对象,该对象大约等于11MB(我使用object.size()函数发现了它的大小)。

当我使用save()函数将此文件保存到磁盘时,生成的文件大小等于736KB。

(1)怎么可能?

(2)是否可以手动使用write.bin()函数?

data.table有121,328行和13列。列的数据类型是

  • 日期(2列)
  • 字符(5列)
  • 整数(3列)
  • 数值(3列)
  • data.table的前五行如下
              date     time QTind OPRAseqNum OEC OCC   Bid BidSize   Ask AskSize type expiration strike
     1: 2005-01-03 09:30:24     Q      94698   C     707.2       1 710.2       1    C 2006-06-17    500
     2: 2005-01-03 09:30:24     Q      94946   C     707.2       1 710.2       1    C 2006-06-17    500
     3: 2005-01-03 09:30:24     Q      94948   C     707.0       1 710.0       1    C 2006-06-17    500
     4: 2005-01-03 09:30:24     Q      94950   C     707.0       1 710.0       1    C 2006-06-17    500
     5: 2005-01-03 09:30:26     Q      98083   C     707.2       1 710.2       1    C 2006-06-17    500
    

    最佳答案

    RAM中的对象未压缩;文件写入磁盘。这说明了大小上的差异。据我所知,不可能对R中的压缩对象执行操作。

    有一个手动的“解决方案”,但您可能不喜欢它。您可以将data.table分成较小的块,然后将它们压缩到磁盘。然后,如果要对整个表执行操作,则可以对一块数据进行解压缩,执行该操作,然后重新压缩它。当然,这将导致明显的性能下降。如果您想要整个列的均值,还将有一些额外的工作。

    或者,更灵活一些,以获得列式存储(如果您更想获取一些列而不是某些行),请查看CRAN上的saves package,但是author considers it experimental或其他磁盘支持的列式数据-商店。

    但是,这两种选择最终都会导致RAM中的表处于未压缩状态(某一点或另一点),它们只是减少了您必须带入的表的数量。

    关于r - 对象比相应的.RData文件大得多。为什么?你能手动做吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33896645/

    10-12 00:23
    查看更多