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