Как сохранить элементы списка по отдельности в R?

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

for (i in 1:length(mylist)) {
  save.dta13(mylist[i], file=paste0(names(mylist)[i], ".dta"))
}

Но это, похоже, не работает, есть идеи?


person Oscar    schedule 11.07.2016    source источник
comment
Вероятно, вы захотите использовать [[ в mylist[[i]].   -  person lmo    schedule 11.07.2016


Ответы (2)


Мы можем использовать lapply для перебора names из list.

lapply(names(mylist), function(nm)
     save.dta13(mylist[[nm]], paste0(nm, ".dta")))
person akrun    schedule 11.07.2016
comment
Ошибки не выдает, но ничего не происходит, что я упускаю? - person Oscar; 11.07.2016
comment
@Floris Из какого пакета save.dta13? - person akrun; 11.07.2016
comment
@Floris Я забыл закрывающую скобку. В противном случае это работает для меня. Вы проверили свой рабочий каталог на наличие файлов. - person akrun; 11.07.2016
comment
Я заметил скобку, однако, когда я запускаю скрипт, он просто не создает никаких файлов... - person Oscar; 11.07.2016
comment
@Floris Я создал mylist <- list(data.frame(v1 = 1:5), data.frame(vN = 1:7)), и он работает. - person akrun; 11.07.2016

Вот еще одно решение (немного отличающееся от того, что опубликовал akrun)

#An example list

L=list(mat1=matrix(c(1,2,3,4,5,6,7,8,9),3,3),mat2=matrix(c(1,2,3,4,5,6,7,8,9),3,3),mat3=matrix(c(1,2,3,4,5,6,7,8,9),3,3))

#Convert elements of list to a data frame
L_DF = lapply(L,function(x)as.data.frame(x))

#Check the class of each element 
 class(L_DF$mat1)
#[1] "data.frame"



  class(L_DF$mat2)
#[1] "data.frame"


     class(L_DF$mat3)
#[1] "data.frame"


   names(L_DF)
#[1] "mat1" "mat2" "mat3"



#Save as dta

lapply(names(L_DF), function(x) {
     f <- L_DF[[x]]
     save(f, file=paste0(getwd(),'/', x, '.dta'))
 })
person Ramesh K    schedule 11.07.2016