使用map函数循环处理CSV并按截取文件名保存时出现报错
问题解决:循环处理CSV文件时的文件名错误
错误原因
你的代码里,获取文件名的语句name <- tools::file_path_sans_ext(basename(file_paths))使用了整个file_paths向量,而非当前循环迭代的单个path。这会导致name变成所有CSV文件名的集合,后续生成的myfile也是一个字符串向量,而write_csv的file参数仅能接受单个文件路径,因此触发报错。
修正后的代码
library(tidyverse) library(fs) library(dismo) file_paths <- fs::dir_ls("loop/") file_paths %>% map(function(path){ all_data <- read_csv(path, show_col_types = FALSE) # 改用当前迭代的path获取单个文件名 name <- tools::file_path_sans_ext(basename(path)) print(name) # 更简洁的列提取方式(可选) t_max <- all_data %>% pull(2) t_min <- all_data %>% pull(3) rain_fall <- all_data %>% pull(4) res <- data.frame(biovars(t_max, t_min, rain_fall)) myfile = sprintf("%s_bio.csv", name) write_csv(res, file = myfile, col_names = TRUE) })
关键修改点
- 将
basename(file_paths)改为basename(path),确保每次循环只获取当前处理文件的文件名 - 可选:用
pull()替代[,c(n)],更符合tidyverse语法风格
内容的提问来源于stack exchange,提问作者ROGO M
相关产品推荐
相关产品推荐

