对象比对应的.RData文件大得多。为什么?你能手工做吗?
我创建了一个大约等于11MB的对象比对应的.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
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我将更正标题和标签