Не создавать копию с помощью 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
, Это не архивирует ваши данные, но сохраняет их прямо на диске.