如何在小修改后仅重新编织R Markdown修改部分以生成PDF?
针对长耗时R Markdown脚本的增量编织方案
以下是几种实用方法,帮你避免每次微小修改都重新运行整个脚本:
1. 用knitr的缓存功能(最常用)
直接在耗时的代码块中添加cache=TRUE参数,knitr会自动保存代码块的运行结果,后续编织时只要代码块内容、依赖的数据/变量没变化,就会直接调用缓存,不用重新运行:
```{r 耗时分析模块, cache=TRUE} # 这里放你的长耗时代码
如果多个代码块有依赖关系(比如B块依赖A块的结果),给B块加`dependson="耗时分析模块"`参数,确保A块更新时B块也会重新运行。 你也可以全局开启缓存,在脚本开头设置: ```r ```{r setup, include=FALSE} knitr::opts_chunk$set(cache=TRUE)
还能通过`cache.path`指定缓存文件的存储目录,方便管理: ```r knitr::opts_chunk$set(cache.path = "cache/")
注意:如果修改了代码块外的全局变量或依赖数据,需要手动删除对应缓存目录,或者用cache.extra参数绑定依赖的变量(比如cache.extra = list(data_version = 1)),当绑定的变量变化时自动触发重新运行。
2. 拆分脚本+预存计算结果
把长耗时的计算逻辑单独拎出来写成独立R脚本,运行一次后将结果保存为RDS或RData文件:
# 单独的计算脚本:long_computation.R result <- long_running_function() saveRDS(result, "long_computation_result.rds")
然后在主R Markdown脚本中直接加载预存的结果,不用每次重新计算:
```{r load_result, include=FALSE} result <- readRDS("long_computation_result.rds")
只有当你需要更新计算逻辑或数据时,才重新运行那个独立的计算脚本。 ## 3. 用工作流工具追踪依赖 如果脚本涉及多步骤复杂依赖,可以用`targets`或`drake`这类工具: - 定义每个步骤的「目标」(比如原始数据、预处理结果、分析结果、最终文档) - 工具会自动追踪每个目标的依赖关系,只有当依赖项发生变化时,才重新运行对应的步骤 - 编织R Markdown时直接调用已经生成的目标结果,完全跳过未变更的步骤 内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

