渲染 Markdown 文档发生错误时存储块名称

问题描述 投票:0回答:1

我有一个 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 中?

r r-markdown
1个回答
0
投票

在块中,块名称可用作

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)  
})
© www.soinside.com 2019 - 2024. All rights reserved.