我有一个R Markdown文档。本文档中的一些R代码块包含对函数myFun()
的调用。运行此函数总是需要很长时间。因此,我想自动将包含myFun()
的任何块设置为具有cache = TRUE
。我不能修改myFun()
,并且包含它的块没有特殊的识别功能。(例如,它们没有特殊的标签。(考虑到这些限制,是否可以为包含myFun()
的块自动设置cache = TRUE
?
我想到的策略是创建一个区块挂钩,在区块的文本中搜索关键字(myFun
(,如果找到关键字,则设置cache = TRUE
。不过,我不知道这个解决方案是否可行,或者是否有更好的方法。
我在谢一辉关于针织品和R Markdown的书中寻找答案,并在针织品Github网站上搜索问题。但我还没有在这些地方找到答案。SO上有一些相关的帖子——例如,根据knifer的输出格式评估Chunk。但我还没有发现任何能说明这个问题的东西。
我倾向于同意@user2554330的观点,即您可能希望缓存函数myFun()
,而不是代码块(例如,使用内存(。
无论如何,为了回答您的问题:是的,可以使用选项挂钩设置cache = TRUE
,例如
knitr::opts_hooks$set(cache = function(options) {
if (any(grepl('myFun(', options$code))) {
options$cache <- TRUE
}
options
})
CCD_ 11不是检查代码块是否包含对CCD_ 12的调用的完全稳健的方法。如果你想要一个最健壮的方法,你可以试试utils::getParseData()
。