如何在R中对/data文件夹内的文件列表使用sapply()分析?
解决文件移动后无法用sapply读取的问题
问题根源
你执行fs::file_move后,my_list里存储的还是原工作目录下的文件名(比如data_1.csv),但这些文件已经被转移到MYDIRECTORY/data目录中,当前工作目录下已不存在这些文件,所以read.csv找不到目标文件,抛出错误。
解决方法
方法1:重新获取目标目录的文件列表
文件移动完成后,从目标目录重新读取文件列表,通过full.names=TRUE参数获取完整文件路径:
library(dplyr) library(fs) # 生成示例文件 mtcars %>% write.csv("data_1.csv") DNase %>% write.csv("data_2.csv") iris %>% write.csv("data_3.csv") my_list <- list.files(pattern = "data_") fs::file_move(my_list, new_path = "MYDIRECTORY/data") # 从目标目录读取带完整路径的文件列表 target_files <- list.files(path = "MYDIRECTORY/data", pattern = "data_", full.names = TRUE) # 正常读取文件 sapply(target_files, read.csv)
方法2:为原文件名拼接目标路径
如果不想重新获取列表,直接将原文件名与目标目录路径拼接,生成完整路径后读取:
# 文件移动后拼接完整路径 full_paths <- file.path("MYDIRECTORY/data", my_list) # 读取文件 sapply(full_paths, read.csv)
额外提示
- 优先使用
full.names=TRUE获取完整路径,避免不同目录下的文件路径混乱,脚本可读性和稳定性更强。 - 不建议在脚本中频繁使用
setwd()切换工作目录,容易引发路径相关的隐性错误,使用完整路径是更可靠的做法。
内容的提问来源于stack exchange,提问作者Cameron
相关产品推荐
相关产品推荐

