对象比相应的 .RData 文件大得多。为什么?你能手动做吗?
Object much larger than corresponing .RData file. Why? Can you do it manually?
我创建了一个 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 中无法对压缩对象执行操作。
有手册 'solution',但您可能不会喜欢它。您可以将 data.table 分成更小的块,然后将它们压缩到磁盘。那么如果要对整个table做一个操作,可以先解压一个chunk,做操作再重新压缩。当然,这会导致明显的性能下降。如果您想要整个列的平均值,还会有一些额外的工作。
或者,更灵活一点,获取列式存储(如果您更频繁地对获取某些列而不是某些行感兴趣),请查看 saves package on CRAN, but the author considers it experimental 或其他支持的磁盘列式数据存储。
然而,这两种选择最终都会在 RAM 中产生未压缩的 table(在某一点或另一点),它们只是减少了您必须引入的 table 的数量。
我创建了一个 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 中无法对压缩对象执行操作。
有手册 'solution',但您可能不会喜欢它。您可以将 data.table 分成更小的块,然后将它们压缩到磁盘。那么如果要对整个table做一个操作,可以先解压一个chunk,做操作再重新压缩。当然,这会导致明显的性能下降。如果您想要整个列的平均值,还会有一些额外的工作。
或者,更灵活一点,获取列式存储(如果您更频繁地对获取某些列而不是某些行感兴趣),请查看 saves package on CRAN, but the author considers it experimental 或其他支持的磁盘列式数据存储。
然而,这两种选择最终都会在 RAM 中产生未压缩的 table(在某一点或另一点),它们只是减少了您必须引入的 table 的数量。