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

使用here包与R项目加载CSV文件时路径异常问题求助

问题原因与解决方法

原因

问题出在文件路径的构建逻辑上:

  • dir(data_folder, pattern = "*.csv")返回的是Data文件夹内的纯文件名(如filename.csv),而非完整路径。
  • 你手动用paste0("Data/", .)拼接出相对路径Data/filename.csv,但R Markdown运行时的当前工作目录是它所在的Code文件夹,这个相对路径会指向Code/Data/filename.csv——而实际文件在项目根目录的Data文件夹中,因此报错文件不存在。
  • 虽然here::here()能正确返回项目根目录,但你并没有用它来构建最终的文件完整路径,而是依赖了相对路径,导致路径错位。

解决方法

方法一:用here+file.path构建完整路径(推荐)

基于data_folder(已通过here定位到根目录下的Data文件夹)拼接文件名,确保路径绝对正确:

years = 2011:2021

data_folder = here::here("Data") 
  
file_names = dir(data_folder, pattern = "*.csv")
# 筛选年份匹配的文件,再拼接完整路径
file_names = file_names[grepl(paste(years, collapse = "|"), file_names)] %>% 
  file.path(data_folder, .)  # file.path自动适配Windows/macOS的路径分隔符

data_list = file_names %>% 
  map(read_csv)

方法二:让dir直接返回完整路径

给dir添加full.names = TRUE参数,直接获取文件的完整绝对路径,无需手动拼接:

years = 2011:2021

data_folder = here::here("Data") 
  
# 直接获取Data文件夹下CSV文件的完整路径
file_names = dir(data_folder, pattern = "*.csv", full.names = TRUE)
# 筛选年份匹配的文件(用basename提取文件名来匹配)
file_names = file_names[grepl(paste(years, collapse = "|"), basename(file_names))]

data_list = file_names %>% 
  map(read_csv)

补充说明

将R Markdown移到项目根目录能成功运行,是因为此时Rmd的工作目录是项目根目录,Data/filename.csv正好指向正确的文件夹,但这不是规范做法——保持Rmd在Code文件夹更符合项目结构的清晰性,用上述两种方法可以在不调整文件位置的前提下解决问题。

内容的提问来源于stack exchange,提问作者Tee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:22:20