R 中的错​​误处理和日志记录

PPC*_*PPC 3 error-logging r

我在 R 中编写了一个函数来将任何消息打印到日志文件和控制台。但是如果在运行代码时出现任何意外错误,那么错误只会显示到控制台。有没有办法将错误消息同时写入控制台和日志文件?这里是功能..

log_con <- file("Text1.txt", open="a")

loggerfn<-function(Message,LogConnection=log_con){
  cat(Message, file = LogConnection)
  cat(Message)
}
Run Code Online (Sandbox Code Playgroud)

这是示例代码,用于...

for (i in 1:10)
 {
  loggerfn("loop begins\n",log_con)
   a <- rnorm(n = 100, mean = i, sd = 5)
   loggerfn(mean(a),log_con)
   loggerfn("loop Completed\n",log_con)
   if(i==8){
     sdfs
   }
 }
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我通过提供未定义的对象 sdfd 故意引入了错误。下面提供的错误消息仅显示在控制台中,有没有办法将错误消息同时写入控制台和日志文件?

Error: object 'sdfs' not found
Run Code Online (Sandbox Code Playgroud)

Aja*_*hri 5

使用 sink() 将消息和警告转移到文件中。诀窍是设置参数 type="message"

在命令行下运行 R 脚本时,请参考 http://www.statmethods.net/interface/io.html输出错误/警告日志(txt 文件) https://stat.ethz.ch/R-manual/R-devel /library/base/html/sink.html

sink( )函数定义了输出的方向。

描述

sink 将 R 输出转移到一个连接(并停止这种转移)。

sink.number()
Run Code Online (Sandbox Code Playgroud)

报告使用了多少分流。

sink.number(type = "message")报告当前用于错误消息的连接数。用法

sink(file = NULL, append = FALSE, type = c("output", "message"),
     split = FALSE)

sink.number(type = c("output", "message"))
Run Code Online (Sandbox Code Playgroud)

直接输出到文件

sink("myfile", append=FALSE, split=FALSE)
Run Code Online (Sandbox Code Playgroud)

将输出返回到终端

sink()
Run Code Online (Sandbox Code Playgroud)

append 选项控制输出是覆盖还是添加到文件中。split 选项确定输出是否也发送到屏幕以及输出文件。

以下是 sink() 函数的一些示例。

输出定向到 c:\projects 目录中的 output.txt。输出覆盖现有文件。没有输出到终端。

sink("c:/projects/output.txt")
Run Code Online (Sandbox Code Playgroud)

输出定向到 cwd 中的 myfile.txt。输出附加到现有文件。输出也发送到终端。

sink("myfile.txt", append=TRUE, split=TRUE)
Run Code Online (Sandbox Code Playgroud)

重定向输出时,使用 cat() 函数对输出进行注释。