R语言读取前一日csv格式dataframe对比时路径多斜杠报错如何解决
问题解决办法
错误原因
file.path()函数的作用是拼接多级路径,每传入一个独立参数就会自动在参数之间添加系统路径分隔符(macOS/Linux下为/),你把日期对象、.csv后缀作为两个独立参数传入,所以生成的路径会在日期和后缀之间多出斜杠,和实际保存的文件名不匹配。- 额外隐藏问题:你使用
writexl包的write_xlsx()导出的是Excel二进制文件,即使手动写了.csv后缀,实际文件格式还是xlsx,后续用read.csv()这类读取纯文本csv的函数也会报错。
修复方案
1. 修复路径拼接逻辑
两种可选用法,推荐第一种,适配不同操作系统的路径规则:
方法1:先拼接完整文件名再传入file.path()
#Compare with previous day yesterday <- Sys.Date()-1 # 先拼接日期和后缀得到完整文件名 yesterday_file <- paste0(yesterday, ".csv") df_yesterday <- read.csv(file.path("~/Documents/daily_data/data_August2021", yesterday_file), header = TRUE, sep=",", stringsAsFactors=TRUE)
方法2:直接用paste0拼接全路径
#Compare with previous day yesterday <- Sys.Date()-1 df_yesterday <- read.csv(paste0("~/Documents/daily_data/data_August2021/", yesterday, ".csv"), header = TRUE, sep=",", stringsAsFactors=TRUE)
2. 修复文件读写格式不匹配问题
根据你的存储需求二选一修改:
方案A:确实需要保存为csv格式
修改保存端代码,用R原生write.csv()生成纯文本csv文件:
setwd("~/Documents/daily_data/data_August2021") # row.names = FALSE 避免多余的行号列写入csv write.csv(as.data.frame(df), paste0(Sys.Date(), '.csv'), row.names = FALSE)
方案B:需要保存为xlsx格式
修改文件名后缀和读取函数:
# 保存端代码 setwd("~/Documents/daily_data/data_August2021") library(writexl) write_xlsx(as.data.frame(df), paste0(Sys.Date(), '.xlsx')) # 读取端代码 yesterday <- Sys.Date()-1 library(readxl) yesterday_file <- paste0(yesterday, ".xlsx") df_yesterday <- read_xlsx(file.path("~/Documents/daily_data/data_August2021", yesterday_file))
内容的提问来源于stack exchange,提问作者Rafael Bravo
相关产品推荐
相关产品推荐

