Я вижу следующую ошибку. Связана ли эта ошибка с объемом памяти на моей машине? Если я хочу, чтобы он мог читать произвольный файл, разрешенный R, но размер которого неизвестен, как заставить readBin()
работать таким образом?
$ Rscript main.R
R> con=file('testbin', 'wb')
R> object=list(1:10)
R> print(serialize(object, NULL))
[1] 58 0a 00 00 00 03 00 04 00 03 00 03 05 00 00 00 00 05 55 54 46 2d 38 00 00 00 13 00 00 00 01 00 00 00 ee 00 00 00 02 00 00
[42] 00 01 00 04 00 09 00 00 00 0e 63 6f 6d 70 61 63 74 5f 69 6e 74 73 65 71 00 00 00 02 00 00 00 01 00 04 00 09 00 00 00 04 62
[83] 61 73 65 00 00 00 02 00 00 00 0d 00 00 00 01 00 00 00 0d 00 00 00 fe 00 00 00 0e 00 00 00 03 40 24 00 00 00 00 00 00 3f f0
[124] 00 00 00 00 00 00 3f f0 00 00 00 00 00 00 00 00 00 fe
R> writeBin(serialize(object, NULL), con)
R> close(con)
R> con=file('testbin', 'rb')
R> unserialize(readBin(con, what=raw(), n=2L**36-1))
Error: vector memory exhausted (limit reached?)
Execution halted
используйте
file.info()$size
, чтобы найти размер файла, чтобы вы знали, сколько байтов вам нужно будет прочитать.нет. Мне не нужно находить размер файла, так как ввод может быть из канала.
а ты на 64-битной ОС?
Пожалуйста, откройте его.
Да. 64-битная Mac OS. Но решение должно быть кроссплатформенным.
Но в вашем примере трубы вообще не используются. Если бы он был потоковым в канале, вам нужно было бы читать данные кусками в цикле.
Я уже сказал, не зная его размера. Любое решение должно знать, что его размер не имеет значения.