假设我有一堆 R 代码在脚本中,并且我想记录从 .GlobalEnv 运行的所有 R 代码以及错误和警告消息到一个平面文件或数据库中。我可以编写一个简单的 logme 函数,如下所示,或者通过更改 options(error = mylogginfunction)
来使其变得更加复杂,以便还可以获取错误。
mylogfile <- tempfile()
logme <- function(x){
mode <- "at"
if(!file.exists(mylogfile)){
mode <- "wt"
}
myconn <- file(mylogfile, mode)
writeLines(x, myconn)
close(myconn)
invisible()
}
logme(sprintf("%s: started some yadayada, ", Sys.time()))
x <- 10
x * 7
logme(sprintf("%s: done with yadayada", Sys.time()))
## Get the log
cat(readLines(mylogfile))
日志输出为: 2015-05-14 17:24:31:开始一些yadayada,2015-05-14 17:24:31:完成yadayada
但我想要的是日志文件记录执行的表达式,而不必在每个语句周围编写包装器。 我希望日志看起来像这样。 2015-05-14 17:24:31:开始一些yadayada, x < -10,x * 7 2015-05-14 17:24:31:完成yadayada
所以我的问题是,如何获取R正在执行的内容,以便可以将执行的表达式存储在日志/数据库中,而无需在每个表达式之前编写函数调用(例如myhandler(x < -10); myhandler(x * 10))。 对此有什么帮助吗?
.R
文件如何?该文件逐行读取输入文件,在某处编写命令(通过cat
或将表达式保存在数据库中),执行它(通过eval(parse(text=))
)并继续下一行呢? - nicolasink
?这个答案提到了一些可能有用的包。 - Roland