如何将错误传回 Rmarkdown::render 函数?

How to pass errors back to the Rmarkdown::render function?

我正在尝试通过 R 脚本呈现 Rmarkdown 文件。 (下面两个文件的代码)。我想做的是根据错误的位置将信息传回渲染函数。这可能是文件无法读取输入数据集。我想这样做,因为我想 运行 脚本作为 cron 作业,并希望它给我发一封电子邮件,告诉我为什么我可能需要重新 运行 代码或错误是什么是。

我已经阅读了其他一些类似的 Whosebug 问题,但无法通过一些测试了解它是如何实现我想要的。

r 脚本:(我曾尝试使用类似下面的内容)

rm(list = ls())
setwd("C:/Users/joel.kandiah/Downloads")


a <- print(try(rmarkdown::render("test.Rmd", quiet = T), TRUE))
#> [1] "C:/Users/joel.kandiah/Downloads/test.nb.html"

cat(eval(a))
#> C:/Users/joel.kandiah/Downloads/test.nb.html

Rmarkdown 文档:

if(!exists("data_raw")) simpleError("Dataset has not been loaded")
#> <simpleError: Dataset has not been loaded>

我希望将简单错误视为 R 脚本中的一个对象。类似于退出代码的东西也可能是可以接受的。

一种可能的方法是在 R script.

中将 tryCatch 环绕在 render 周围

R 脚本

# Render the markdown document; ####
tryCatch(
        expr = rmarkdown::render(
                "markdown.Rmd",
                clean = TRUE
        ),
        
        error = function(cond) {
                
                message(cond)
                
        },
        
        warning = function(cond) {
                
                message(cond)
                
        }
        
)

R Markdown

# Force an error; 
stop("You do not have permission to render. Admin password is needed.")

这将 return 向您的 script 发送相同的 error 消息。