我正在用r编写一些代码以阅读excel并在成功后发送电子邮件。我想捕获在读取文件时生成的所有警告(例如,在期待日期但得到文本时),因为该文件存在一些不一致的地方,因此我希望将这些警告作为电子邮件的一部分。
我是R的新手,如果之前已经回答过,就无法在搜索中道歉。
到目前为止,我已经尝试将警告消息处理为字符串变量,它似乎可以正常工作,但仅当我运行代码段(Ctrl + Enter)时才可以。如果我全部运行,都不会捕获警告消息。
suppressWarnings(library("readxl"))
success = TRUE
readIssues <- "No file read issues detected"
tryCatch( {
#read excel file
pct <<- read_excel("Filename.xls")
}
, error = function(m) {success <<- FALSE}
)
readIssues <- attr(warnings(),"name")
readIssues <- paste(readIssues,sep=" ",collapse="\n")
我希望readIssues存储警告消息,以便以后在生成电子邮件时可以在代码中使用它们(例如“ AF1059 / R1059C32中的预期日期:收到“某些文本””)。
我很好奇为什么当我选择所有内容并按Ctrl + Enter时它运行正常,而当我按Ctrl + Alt + R时却运行不正常。
答案 0 :(得分:1)
诀窍是在tryCatch中应用useCallingHandlers,然后提取所需的警告消息。如果有人在寻找答案,请在此处发布:
对此Post
的信用代码:
suppressWarnings(library("readxl"))
success = TRUE
readIssues <- "No file read issues detected"
myWarnings <- NULL
wHandler <- function(w) {
myWarnings <<- c(myWarnings,w)
invokeRestart("muffleWarning")
}
tryCatch( {
pct <- withCallingHandlers(read_excel("Filename.xls"), warning = wHandler)
}
, error = function(m) {success <<- FALSE}
)
pickOut <- sapply(myWarnings, function(x) class(x)=="character")
readIssues <- myWarnings[pickOut]
readIssues <- paste(readIssues,sep="\n",collapse="\n")
谢谢大家的帮助!