0%

Save all console output to file in R

在一些临床试验分析中,一般要求所有输出的结果中不能有errors和warnings;对于SAS而言,我们只需要查看SAS导出的log日记即可,但对于R而言,Rstudio/R都没有现成的功能来完成这个步骤。还好R可以通过sink()函数功能来实现

以下均是网上搜索整理的,若有更好的办法,可以交流下哈。。。

先指定log文件,通过sink函数连接log文件,其中若想导出error/warnings/message等提示信息,需要增加type = "message"参数,默认是output参数,即无提示信息

logfile <- file("test.log")
sink(file = logfile, append = TRUE, type = "output")
sink(file = logfile, append = TRUE, type = "message")

接着加入测试代码

a <- 11
b <- 2

print(a + b)

message("Just a message")
warning("This is a warning")
stop("This is an error message")

最后还是通过sink函数来“断开”连接,注:若前面用了两次sink函数,则最后也要用两次sink来结束,如:

sink()
sink(type = "message")

若想确定是否真正结束了连接,则可通过下述方法检查(若不结束连接,你会发现一些error/warning都无法正常显示)

sink.number(type = c("output"))   # 正常退出,提示0
sink.number(type = c("message"))  # 正常退出,提示2

或者通过closeAllConnections()函数退出全部连接

closeAllConnections()

最后用file.show("test.log")函数查看下console输出结果:

[1] 13
Just a message
Warning message:
This is a warning 
错误: This is an error message

以上的方法个人觉得不是太好用。。。其实最好的还是用R命令行的方法

先写一个R脚本

a <- "a"
a
How come I do not see this in log

接着在本地windows电脑或者服务器上运行

$ R CMD BATCH script.R &  # linux
# C:\R-3.6.2\bin\R.exe CMD BATCH script.R &  # windows

最后直接会出个script.Rout文件,如下所示:

R version 3.6.2 (2019-12-12) -- "Dark and Stormy Night"
Copyright (C) 2019 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R是自由软件,不带任何担保。
在某些条件下你可以将其自由散布。
用'license()'或'licence()'来看散布的详细条件。

R是个合作计划,有许多人为之做出了贡献.
用'contributors()'来看合作者的详细情况
用'citation()'会告诉你如何在出版物中正确地引用R或R程序包。

用'demo()'来看一些示范程序,用'help()'来阅读在线帮助文件,或
用'help.start()'通过HTML浏览器来看帮助文件。
用'q()'退出R.

> a <- "a"
> a
[1] "a"
> How come I do not see this in log
错误: unexpected symbol in "How come"
停止执行

这样的log文件应该更加合适一点,大家觉得呢。。。

参考资料:

How to save all console output to file in R?
Saving R Output to a File

本文出自于http://www.bioinfo-scrounger.com转载请注明出处