RStudio中RMarkdown knit时文件未找到的问题排查与解决
RMarkdown Knit报「系统找不到指定文件」的原因和解决办法
为啥会出现这问题?
RMarkdown执行knit的时候,会新开一个完全独立的R会话——和你当前RStudio界面里的工作环境是两码事。也就是说:
- 你手动在界面里建的
combined_databike数据框,或者通过「导入数据集」功能拉进来的tripdata_202006这些文件,都只存在于当前的交互会话里,knit的新会话根本看不到。 - 另外,如果你的文件用了相对路径,但knit时的工作目录和你当前RStudio的工作目录不一样,也会找不到外部文件。
怎么解决?
1. 把所有数据处理代码写进RMarkdown里
别依赖手动在界面里跑的代码,把以下内容全放进RMarkdown的代码块:
- 导入
tripdata_202006到tripdata_202105的代码(直接从RStudio「导入数据集」生成的代码复制就行,比如read_csv()这类) - 创建
combined_databike的完整代码
举个例子:
# 导入单个月度数据 tripdata_202006 <- read_csv("tripdata_202006.csv") # 批量导入所有月度数据(省事写法) file_list <- list.files(pattern = "tripdata_202006|tripdata_202007|...|tripdata_202105", full.names = TRUE) all_trips <- lapply(file_list, read_csv) combined_databike <- dplyr::bind_rows(all_trips)
2. 统一工作目录
- 要么在RMarkdown开头用
here包设置路径(比setwd()靠谱,不会出路径混乱):
library(here) # 确认数据文件路径对不对 here("tripdata_202006.csv")
- 要么直接把RStudio的工作目录设为项目目录:点「Session」→「Set Working Directory」→「To Project Directory」,把所有数据文件都放在这个目录下,knit时会自动用这个目录当工作目录。
3. 检查代码块的执行设置
别给代码块加eval=FALSE——加了这个代码就不会跑,自然生成不了数据框。正常代码块默认是eval=TRUE,比如:
{r} # 这个代码块会正常执行,生成数据框 tripdata_202006 <- read_csv("tripdata_202006.csv")
4. 重启R后再试
点RStudio的「Session」→「Restart R」,然后手动跑一遍RMarkdown里的所有代码块,确认没报错,再执行knit。这样能排除当前会话里残留的旧对象干扰。
内容的提问来源于stack exchange,提问作者Tails0298
相关产品推荐
相关产品推荐

