使用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
相关产品推荐
相关产品推荐

