You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 02:45:35