我在 R 中有一个很大的原始向量(即二进制数据数组),我想将其写入磁盘,但我收到一条错误消息,告诉我该向量太大。这是一个可重现的示例和我收到的错误:
> writeBin(raw(1024 * 1024 * 1024 * 2), "test.bin")
Error in writeBin(raw(1024 * 1024 * 1024 * 2), "test.bin") :
long vectors not supported yet: connections.c:4147
我注意到这与 2 GB 文件限制有关。如果我尝试少写一个字节(1024 * 1024 * 1024 * 2 - 1),它就可以正常工作。
我正在考虑采取某种解决方法,将大文件的块批量写入磁盘,仅将二进制数据附加到磁盘,如下所示:
large_file = raw(1024 * 1024 * 1024 * 2)
chunk_size = 1024*1024*512
n_chunks = ceiling(length(large_file)/chunk_size)
for (i in 1:n_chunks)
{
start_byte = ((i - 1) * chunk_size) + 1
end_byte = start_byte + chunk_size - 1
if (i == n_chunks)
end_byte = length(large_file)
this_chunk = large_file[start_byte:end_byte]
appendBin(this_chunk, "test.bin") # <-- non-existing magical formula!
}
但我找不到任何类似我上面写的“appendBin”的函数,也找不到任何其他 R 文档来告诉我如何将数据直接附加到磁盘。
所以我的问题归结为:有谁知道如何append原始(二进制)数据到文件已经开启磁盘而不必先将磁盘上的完整文件读取到内存?
额外详细信息:我目前在具有 192GB RAM 的 Windows 10 PC 上使用 R 版本 3.4.2 64 位。我在另一台电脑(R 版本 3.5 64 位,Windows 8,8GB RAM)上尝试过,遇到了完全相同的问题。
任何类型的见解或解决方法将不胜感激!
谢谢你!