对象比对应的.RData文件大得多。为什么?你能手工做吗?

对象比对应的.RData文件大得多。为什么?你能手工做吗?,r,save,storage,binary-data,R,Save,Storage,Binary Data,我创建了一个大约等于11MB的data.table(类似于data.frame——请参见下面的注释)对象(我使用object.size()函数找到了它的大小) 当我使用save()函数将此文件保存到磁盘时,生成的文件大小等于736KB (1) 这怎么可能 (2) 是否可以使用手动方式实现此小尺寸 write.bin()函数 data.table有121328行和13列。列的数据类型为 日期(2列) 字符(5列) 整数(3列) 数字(3列) 数据表的前五行如下 date

我创建了一个大约等于11MB的
data.table
(类似于
data.frame
——请参见下面的注释)对象(我使用
object.size()函数找到了它的大小)

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

(1) 这怎么可能

(2) 是否可以使用手动方式实现此小尺寸
write.bin()
函数

data.table有121328行和13列。列的数据类型为

  • 日期(2列)
  • 字符(5列)
  • 整数(3列)
  • 数字(3列)
  • 数据表的前五行如下

              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分解成更小的块,并将其压缩到磁盘。然后,如果要对整个表执行操作,可以解组块,执行该操作,然后重新压缩它。当然,这将导致明显的性能下降。如果您需要整个列的平均值,还需要做一些额外的工作

    或者,更灵活地说,要获得一个列存储(如果您经常对获取某些列而不是某些行感兴趣),请查看on-CRAN,但不包括或其他磁盘支持的列数据存储


    但是,这两种方法最终都会在RAM中产生一个未压缩的表(在某一点或另一点),它们只是减少了您必须引入的表的数量。

    因此,如果我理解正确,我无法使用R将其保存为压缩文件,但当R将其保存到磁盘时(使用
    save()
    函数)它会自动压缩它?@conighion或多或少是正确的。当data.table是R名称空间中的对象(在RAM中)时,它不是“文件”。当您将其保存到磁盘时,它将成为一个“文件”,默认情况下,它是一个压缩文件。请参阅?保存在压缩选项下,以查看它如何处理压缩。谢谢。我使用了命令
    save(object,file=“Filename.dat”,compress=F)
    ,文件的大小变为大约12MB。它与等效的
    data.frame
    的大小相比如何?我不确定这是因为使用了
    数据.table
    ,而是因为R使用了额外的内存来表示对象(例如,一个整数在R中占用的空间远远超过4或8个字节)-请参见。@nrussel这不是因为使用了
    数据.table
    。仅供参考,
    data.table
    大小为
    11553440字节
    ,相应的
    data.frame
    大小为
    11552328字节
    。谢谢你的链接。@nrussel我将更正标题和标签