如何在RStudio RMarkdown knitr中取消read_chunk的缓存?
解决R Markdown中外部R文件修改后不更新输出的问题
嘿,这个问题我太熟了——这就是knitr的缓存机制在“偷懒”呢!当你运行{r setup}块时,knitr默认会缓存它的执行结果,哪怕你修改了外部的example.R,只要setup块的缓存没被触发更新,就会一直用之前加载的旧代码结果。
下面给你几个实用的解决办法:
禁用setup块的缓存:直接在setup块的选项里加上
cache=FALSE,修改后的块定义如下:{r setup, cache=FALSE} source("example.R")这样每次运行setup块时,都会重新读取并执行
example.R的最新内容,彻底避免缓存干扰。手动清除现有缓存:如果你不想修改块设置,可以手动清理缓存文件:
- 找到你的Rmd文件所在目录下的
_cache文件夹,删除里面对应setup块的缓存子目录; - 或者在RStudio中,点击Knit按钮旁边的下拉箭头,选择「Clear Knitr Cache」,之后再重新运行代码块即可。
- 找到你的Rmd文件所在目录下的
让缓存自动检测外部文件变化:如果你想保留缓存功能(比如setup块里有其他耗时操作),可以用
cache.extra参数让knitr跟踪example.R的修改时间。修改setup块如下:{r setup, cache=TRUE, cache.extra=file.mtime("example.R")} source("example.R")这样只要
example.R的内容被修改(文件修改时间变化),knitr就会自动重新运行setup块,加载最新的代码。
内容的提问来源于stack exchange,提问作者pluke
相关产品推荐
相关产品推荐

