2014-01-21 6 views
0

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

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' 

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

ответ

0

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

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

ffload распаковывает файлы Ф.Ф., которые содержатся в 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) до ffloading, чтобы избавиться от предупреждения.

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

+0

Благодарим за этот ответ! Так что на самом деле моя проблема исходит из ffsave. Перед загрузкой объектов ff я создал их с помощью ffsave. Когда я использую ffsave, он создаст Object.RData и Object.ffdata в выбранном вами каталоге и другую папку в tmp (папка Rtmpsj1b2f). Если я не хочу иметь эту последнюю папку, мне нужно добавить путь к рутинному движению, который я хочу в ffsave? – Chika

+0

Перед созданием объектов ff необходимо установить папку fftempdir в папку, в которой вы хотите разместить файлы ff. options (fftempdir = "path/to/your/folder") – jwijffels

+0

Хорошо! Когда я добавляю это, у меня есть ошибка en: невозможно открыть файл '/ tmp/RtmpBHIZfb/file1a8256d52308': Нет такого файла. Кажется, что даже если я попросил конкретную папку, это не работает. – Chika

Смежные вопросы