【发布时间】:2019-03-20 01:16:22
【问题描述】:
给定一个 3 级嵌套列表:
mylist <- list("1000"=list("cars"=list("fast"=mtcars[1:10,], "slow"=mtcars[11:15,]), "flower"=iris), "2000"=list("tooth"=ToothGrowth, "air"=airquality, "cars"=list("cruiser"=mtcars[5:12,], "fast"=mtcars[1:3,], "mild"=mtcars[9:18,])))
(即:mylist$1000$cars$fast,其中fast 是一个数据框,cars 和1000 是mylist 中的嵌套列表)
我想将每个最里面的数据框(即:fast)保存为 .csv,并将 df 名称作为文件名,即:fast.csv,和我想要文件要保存在以第二级列表命名的目录中,即:~/1000/fast.csv。
每个目录都已经存在,所以我不需要创建新的1000 和2000 目录。
我的直觉是做一个嵌套的lapply 或lapply/mapply 组合......但是跟踪不同的级别和他们的名字对我来说是一个挑战。我知道purrr 有iwalk 函数,但我不确定如何在深度嵌套列表中使用它。
我当前的尝试失败了。
lapply(mylist, function(d){
lapply(names(mylist), function(id){
lapply(names(d$cars), function(s){
lapply(d$cars, function(a){
write.csv(a, paste0(outdir, id, "/", s, ".csv"))})})})})
输出结果是单个文件以多个名称保存到所有目录中。即:~/1000/cruiser.csv,~/1000/fast.csv,~/1000/mild.csv,~/2000/cruiser.csv,~/2000/fast.csv,~/2000/mild.csv ...其中所有文件实际上只是mylist$2000$cars$mild的一个csv
【问题讨论】: