如果你做想要保存所有的警告,也许是外部文件,你可以打包你正在执行的代码withCallingHandlers()
。它允许你为警告条件定义一个'处理程序'。处理程序是每次遇到警告时运行的函数;您可以使用它来完成您希望通过传递警告消息的任何内容。 (关于此主题的优秀简介,请参阅Martin Morgan对this SO question的回答。)
在此,我定义了一个处理程序:(a)将警告消息附加到文件; (b)使用invokeRestart()
进行警告发生地点的功能评估。可以很明显的修改,使之适合您的具体需求:
# DEFINE A WRAPPER FUNCTION THAT:
# - EVALUATES A GIVEN EXPRESSION
# - SAVES ALL WARNINGS TO A LOGFILE
saveAllWarnings <- function(expr, logFile="warning_log.R") {
withCallingHandlers(expr,
warning=function(w) {
cat(conditionMessage(w), "\n\n", file=logFile, append=TRUE)
invokeRestart("muffleWarning")
})
}
# TRY IT OUT WITH A MADE UP FUNCTION THAT THROWS SEVERAL WARNINGS
messyFun <- function() {
warning("oops")
warning("boops")
warning("can't I get anything right?")
1
}
saveAllWarnings(messyFun(), logFile="messyFun warning log.R")
我想你想使用这种脚本 –
的RSCRIPT而不是R如果只运行一个脚本,当然历史也只是'源( myfile1.r)'。你为什么需要保存? –
对不起 - 我没有说清楚;我其实是指如何保存工作区,而不是历史!那会教我不校对的问题...... – ChrisW