【问题标题】:How to save the elements of a list individually in R?如何在R中单独保存列表的元素?
【发布时间】:2016-11-13 14:59:47
【问题描述】:

所以我有一个很长的元素列表,我想将这些元素中的每一个单独保存为数据框。对,现在我正在尝试这样做:

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

但这似乎不起作用,有什么想法吗?

【问题讨论】:

  • 您可能想在mylist[[i]] 中使用[[

标签: r list for-loop elements


【解决方案1】:

我们可以使用lapply 循环遍历listnames

lapply(names(mylist), function(nm)
     save.dta13(mylist[[nm]], paste0(nm, ".dta")))

【讨论】:

  • 它没有给出错误但没有任何反应,我错过了什么?
  • @Floris save.dta13 来自哪个包?
  • @Floris 我忘记了右括号。否则,它对我有用。您是否检查过您的工作目录中的文件。
  • 我注意到了括号,但是,当我运行脚本时,它并没有创建任何文件......
  • @Floris 我创建了mylist <- list(data.frame(v1 = 1:5), data.frame(vN = 1:7)),它正在工作。
【解决方案2】:

这是另一个解决方案(与 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'))
 })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    相关资源
    最近更新 更多