将小整数写入R中的二进制文件

我有一个关于写入R中的二进制文件的问题.我正在进行数据压缩,我想写一个二进制文件整数,可以用两个字节表示,但R代表它们在4个字节上.是否有任何数据类型可以存储两个字节或一个字节的数字(如C中的短整数)?

如果不是,当你使用带有小整数的writeBin(例如可以保存为1个字节)和size = 1时,程序是否写入整数的所有4个字节(包括0个字节)或者将其转换为1字节.

这对我来说是一个非常重要和紧迫的问题,我们将非常感谢您的帮助.如果您知道有关写入二进制文件的全面帮助,请告诉我们.谢谢!

(有时,当我使用大小等于小数字的writeBin时,我得到一个错误,说明我的机器上没有定义大小.我该如何解决?为压缩目的将整数写入文件的最佳方法是什么?拥有最小的文件)?原始数据类型有帮助吗?)

最佳答案 你可能会让你的生活变得太复杂. R默认情况下在save()中使用压缩,你测量的还不够好吗?一个例子:

R> vec <- rep(1L, 100)                 ## 100 integer elements
R> object.size(vec) 
440 bytes                              ## so there must be a 40 byte overhead
R> str(vec)
 int [1:100] 1 1 1 1 1 1 1 1 1 1 ...
R> save( vec, file="/tmp/vec.RData")
R> file.info("/tmp/vec.RData")[1:3]
               size isdir mode
/tmp/vec.RData   64 FALSE  644         ## stored to 64 bytes!
R> 

您可能会认为重复值非常适合压缩,但它们甚至可能适用于您的数据集?

否则,可以尝试支持单字节和双字节类型的CRAN软件包ff.

最后,如果您想要完全控制,可以使用C或C分配较短的整数类型,甚至是char类型.有一个package I could recommend for interfacing C++

点赞