将深度嵌套的文件保存到具有特定文件名的特定目录中

时间:2018-10-15 15:04:00

标签: r lapply purrr mapply

给出一个三级嵌套列表:

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,]))) 

visual nested list example

(即mylist$1000$cars$fast,其中fast是一个数据帧,而cars1000mylist中的嵌套列表)

我想将每个最里面的数据框(即:fast)另存为.csv,并以df名称作为文件名,即:fast.csv我希望将文件保存在以第二级列表命名的目录中,即~/1000/fast.csv

每个目录已经存在,因此不需要创建新的10002000目录。

我的本​​能是做一个嵌套的lapplylapply / 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

1 个答案:

答案 0 :(得分:1)

假定子文件夹在工作目录内:

[].slice