2013-08-27 2 views
1

У меня есть список, Z, где каждый Z[[i]] является объектом ffdf.Сериализация для списка объектов ffdf

Мой вопрос заключается в том, как сохранить Z на диск для будущих сеансов, возможно, используя что-то вроде save.ffdf.

Z <- list() 
for(i in 1:10) { 
    Z[[i]] <- as.ffdf(data.frame(array(1,dim=c(2,10)))) 
} 

is(Z[[1]]) 
is(Z) 
+0

Почему бы просто не использовать 'save (Z, file =" Z.Rdata ")' ... работал нормально, когда я это пробовал ?! – holzben

+1

@holzbrn Поскольку файл ff сохраняется в каталоге temp и будет удален. После того, как вы перегрузите 'Z.Rdata', попробуйте ввести' Z [[1]] ', и вы получите что-то вроде' открытия ff C:/Users /..../ AppData/Local/Temp/RtmpO47OSM/ffdf5645baa5ac8.ff'. – Jase

+0

А, ок! Я просто перезапустил сеанс, а не компьютер! Извините .. – holzben

ответ

2

Вы можете использовать ffsave(), чтобы сохранить список объектов, но он ожидает, что список имен, которые могут быть решены в текущей среде. Однако вы можете написать свою собственную вспомогательную функцию, чтобы каждый объект (df) в списке в переменную и использовать ffsave для сохранения этих объектов. Что-то вроде этого:

saveList <- function(lst, fname) { 
    outlist = c() 
    for (i in 1:length(lst)) { 
     name = paste0('out_',i) 
     outlist = c(outlist, name) 
     assign(name, lst[[i]]) 
    } 
    ffsave(list=outlist, file=fname) 
} 

При загрузке этого файла с ffload() вы получите кучу объектов имена out_1, out_2, ... в текущей среде. Вы, вероятно, не хотите этого, так что вам нужно еще вспомогательную функцию, чтобы положить вещи обратно в список:

loadList <- function(fname) { 
    ffload(fname) 
    objs = ls(pattern="out") 
    outlist = list() 
    for (o in objs) { 
     idx= as.integer(strsplit(o,"_")[[1]][2]) 
     outlist[[idx]] = get(o) 
    } 
    outlist 
} 

Примечание: исходный код должен быть изменен/продлен, если вы хотите использовать имена вместо числовых значения индекса.

+0

Я получаю ошибку 'Ошибка в системе (cmd, input = filelist, intern = TRUE): 'zip' not found' при использовании' saveList' – Jase

+0

Это проблема в 'ffsave()'; он использует 'zip' для сжатия своих файлов. Если у вас нет 'zip' на вашем пути, вы получите эту ошибку. – f3lix

+0

Что вы подразумеваете под «zip на вашем пути»? – Jase

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