将列表中的每个数据帧另存为 CSV,并使文件名与 df 名称 - R; lapply.



>我有一个数据帧列表。我想将每个数据帧另存为单独的 CSV 文件,并使文件名与数据帧的名称相同。

df <- list(mtcars, iris, ToothGrowth) df <- setNames(df, c("mtcars",
"iris", "ToothGrowth"))
lapply(df, function(a) write.csv(a, file = paste0("C:/home/",
unlist(lapply(names(df)), function (b) b)), ".csv"), row.names = FALSE))

给出错误:

文件(file, ifelse(append, "a", "w"(( 中的错误:无效 "描述"参数 另外:警告消息:在 if (文件 == "( file <- stdout(( else if (is.character(file(( { :

文件(file, ifelse(append, "a", "w"((:无效的"描述"参数

我很确定问题出在第二个lapply命令中,但我似乎无法弄清楚如何根据df名称"自动"分配文件名。任何帮助将不胜感激。

谢谢

如果你想迭代名称和 data.frames,你最好使用mapply同时遍历两个列表

mapply(function(dname, data) 
write.csv(data, file = paste0("C:/home/", dname, ".csv"), row.names = FALSE), 
names(df), df)

通过lapply()迭代列表时,当前值名称不可用。使用lapply的替代方法是迭代名称,而不是值

lapply(names(df), function(dname) 
write.csv(df[[dname]], file = paste0("C:/home/", dname, ".csv"), row.names = FALSE))

purrr具有以i开头的函数,使索引映射变得容易。由于您不需要返回任何东西,因此iwalk会很好地工作。给定一个命名列表,iwalk然后应用一个函数,将列表项和列表项的名称作为参数,因此您不需要像使用基apply函数那样提取名称的任何额外步骤。我的文件路径不同只是因为我使用的是 Mac——请随意忽略它。

df <- list(mtcars, iris, ToothGrowth) 
df <- setNames(df, c("mtcars", "iris", "ToothGrowth"))
purrr::iwalk(df, function(dat, name) write.csv(dat, file = paste0("./", name, ".csv")))

最新更新