Не создавать копию с помощью ffload

У меня вопрос по поводу атрибута функции из пакета ff. У меня есть объект ff в определенном каталоге, который я хочу загрузить. Это то, что я использую:

setwd(~/Documents/Data)
ffload("Object", overwrite=TRUE)

Если OVERWRITE=TRUE, копия объекта будет сохранена в папке tmp, и объект будет загружен из этого каталога:

[1] "tmp/Rtmpsj1b2f/clone11876c2c0949.ff"

Но если вам не нужна копия вашего объекта, вам нужно поставить FALSE для перезаписи. Если вы загружаете ваш ff-объект впервые, он создаст копию в папке tmp, даже если overwrite=FALSE! Затем я удалил копию и повторно загрузил объект во второй раз, у меня было следующее сообщение и не было копии:

Warning :
In FUN("Obs_zone_212_19700801_19750731"[[1L]], ...) :
did not overwrite object 'Obs_zone_212_19700801_19750731'

Проблема в том, что я работаю с большим количеством больших файлов и не хочу создавать копии! Что я могу сделать?

1 ответ

Решение

Может быть, это хорошо, чтобы дать объяснение о ffload для вашего случая

У вас есть 2 файла в вашем каталоге ~/Documents/Data. Один называется Object и еще один называется Object.ffData, Object.ffData содержит файлы ff с необработанными данными. Object содержит рабочую область R с виртуальными атрибутами файлов ff (например, уровни, например, указатели на файлы ff,...), размер которых составляет всего несколько килобайт в зависимости от вашей структуры данных.

ffload распаковывает файлы ff, содержащиеся в Object.ffData в папку, в которой вы создали файлы ff (см. getOption("fftempdir") - для вашего случая это было в папке tmp/Rtmpsj1b2f. Если вы укажете rootpath В качестве аргумента для ffload вы можете разархивировать файлы ff в другой каталог. Как в ffload("Object", overwrite=TRUE, rootpath = "/home/myname/myfolder"), Аргумент перезаписи ffload указывает, что если этот разархивированный файл ff уже существует в этом каталоге, он будет перезаписан. Пока что часть ff.

При загрузке с помощью ffload вашего файла вы также загружаете виртуальную часть в сеансе R. Это для вашего случая объект, который вы назвали Obs_zone_212_19700801_19750731 (увидеть ls()). Вы видите предупреждение: при загрузке новых данных этот объект не перезаписывается. Так что вам нужно rm(Obs_zone_212_19700801_19750731) перед загрузкой, чтобы избавиться от предупреждения.

Надеюсь это поможет. Если ваши данные являются объектами ffdf, вы также можете посмотреть на save.ffdf из пакета ffbase, Это не архивирует ваши данные, но сохраняет их прямо на диске.

Другие вопросы по тегам