给出一个三级嵌套列表:
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
...其中所有文件实际上只是csv的csv mylist$2000$cars$mild
答案 0 :(得分:1)
假定子文件夹在工作目录内:
[].slice