我有一个 Rmarkdown 文档,我递归地运行一组输入参数。我需要获取错误描述及其发生位置。无法设法提取块名称(尽管它是在控制台中错误写入的)。
tryCatch({
render("my_Rmarkdown_doc.Rmd"),
output_file = paste0(print_path, "doc_", i, ".html"),
params = inpar[i, ])
},error = function(e) {
message <- conditionMessage(e)
new_message <- data.frame(message = message)
message_df <<- rbind(message_df , new_message)
})
这是控制台的描述
processing file: my_Rmarkdown_doc.Rmd
|........................................... | 14% [chunk_no2]
Quitting from lines 56-78 [chunk_no2] (my_Rmarkdown_doc.Rmd)
如何提取块名称,即本例中的“chunk_no2”并将其与错误消息一起存储在 message_df 中?
在块中,块名称可用作
knitr::opts_current$get("label")
。 我认为这在您的错误处理程序中不可用,但您可以编写一个钩子函数(请参阅https://yihui.org/knitr/hooks/#chunk-hooks),在尝试执行每个块之前保存标签,并将保存的值包含在您的 message_df
中。 在钩子函数中,opts_current
值存储在options
参数中。
例如,在文档中使用此设置:
```{r setup and data import, include=FALSE}
library(knitr)
hook_chunkname = function(before, options, envir, name, ...) {
if (before) {
saved_chunk <<- options$label
}
}
knit_hooks$set(chunkname = hook_chunkname)
opts_chunk$set(chunkname = TRUE)
```
并使用如下代码运行文档:
message_df <- data.frame(message=character(),
chunk=character())
saved_chunk <- "Initial value"
tryCatch({
rmarkdown::render("Untitled.Rmd")
},error = function(e) {
message <- conditionMessage(e)
new_message <- data.frame(message = message, chunk = saved_chunk)
message_df <<- rbind(message_df , new_message)
})