doo*_*oze 6 error-handling r file output sink
我使用 R 的 sink() 函数将错误、警告、消息和控制台输出捕获到单个文本文件中。
我想知道同时将消息和输出类型下沉到单个打开的文件是否不好?
我将上述所有内容捕获到一个文件中,但我必须打开一个文件句柄以允许捕获两种接收器类型。以下代码说明了如何使用文件句柄方法:
message_filename = 'script_messages.txt'
try(message_file <- file(message_filename, open="at")) # open file for appending in text mode
sink(message_file, type="message")
sink(message_file, type="output")
cat("\n\n")
message(format(Sys.time(), "%a %b %d %Y %X TZ(%z)"), appendLF = TRUE)
# next line produces messages since file doesn't exist
try(source("import_file.R"), silent = TRUE)
# Save and close writing errors, warnings, messages, and console output to a file
sink(type="output")
sink(type="message")
close(message_file)
Run Code Online (Sandbox Code Playgroud)
如果我不打开文件句柄,则接收器“输出”类型消息是文本文件中捕获的唯一消息。
关于接收器 {base} 的文档在“详细信息”部分的前半部分中有一些关键信息,但我不够流利,无法确保我已正确实现它。
小智 2
我相信这与警告的全局选项有关。默认值是warn=0
“警告将被存储,直到 top\xe2\x80\x93level 函数返回”。换句话说,当您运行时source("script.R")
,R 会存储警告并在脚本完成后(即运行后)打印它们sink(type="output"); sink(type="message"); close(message_file)
。
要更改此设置,您可以options(warn=1)
在获取脚本之前调用,这将在发生警告时打印警告,因此将被接收器捕获。每个会话只需运行一次。