dependson 应包含一个字符向量,列出缓存代码块所依赖的每一个代码块。只要 knitr 检测到某个依赖项发生了变化,就会更新缓存代码块的结果。
请注意,如果 a_very_large_file.csv 发生变化,这些代码块不会更新,因为 knitr 的缓存只跟踪 .Rmd 文件内部的变化。如果你想同时跟踪该文件的变化,可以使用 cache.extra 选项。这是一个任意的 R 表达式,只要它发生变化,缓存就会失效。一个很好用的函数是 file.info():它会返回关于文件的一系列信息,包括文件最后一次修改的时间。然后你可以这样写:
{r raw\_data, cache.extra = file.info("a\_very\_large\_file.csv")} rawdata <- readr::read\_csv("a\_very\_large\_file.csv")
随着你的缓存策略变得越来越复杂,最好定期使用 knitr::clean_cache() 清除所有缓存。
我采纳了 David Robinson 的建议来命名这些代码块:每个代码块都以它所创建的主要对象命名。这使得 dependson 规范更容易理解。
全局选项
随着你对 knitr 的使用越来越多,你会发现某些默认的代码块选项不符合你的需求,并希望修改它们。你可以通过在代码块中调用 knitr::opts_chunk$set() 来实现。例如,在编写书籍和教程时,我会设置:
knitr::opts_chunk$set( comment = "#>", collapse = TRUE )
这会使用我偏好的注释格式,并确保代码和输出紧密地交织在一起。另一方面,如果你在准备一份报告,可能会设置:
knitr::opts_chunk$set( echo = FALSE )
这会默认隐藏代码,只显示你特意选择显示的代码块(通过 echo = TRUE)。你可能会