如何将错误传回 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
消息。
我正在尝试通过 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
消息。