R:如何有效地将0到1之间的数字保存为文件中的字节

时间:2016-12-14 14:36:00

标签: arrays r byte

在R中,我有n个数字x_1,...,x_n介于0和1之间,并希望将它们保存为压缩有损,这样每个数字只需要一个字节:

  • 对于{1,...,n}中的k将每个x_k四舍五入到i_k*1/255表单的下一个数字,其中i_k位于集合{1,...,255}

  • 然后我想将n个数字i_1,...,i_n保存为文件中的字节。

这将导致文件大小为n个字节。从文件中再次检索x_1,...,x_n的近似值的反向操作也是我感兴趣的。

我如何在R?

中实现这一目标

1 个答案:

答案 0 :(得分:2)

压缩

set.seed(0)
x <- runif(1024*400)
y=as.raw(255*x)
save(y, file="test.raw")

在我的操作系统上创建一个401kb的文件,用于存储400kb - 我假设存储文件大小有轻微的开销。

要解压缩

rm(y)
load("test.raw")
rbind(x=head(x),y=head(as.numeric(y)/255))
#       [,1]      [,2]      [,3]      [,4]      [,5]      [,6]
#x 0.8966972 0.2655087 0.3721239 0.5728534 0.9082078 0.2016819
#y 0.8941176 0.2627451 0.3686275 0.5725490 0.9058824 0.2000000

正如您所料,由于存储限制,小数点后三位的准确度会下降