【发布时间】:2015-05-14 15:37:46
【问题描述】:
假设我在脚本中有一堆 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 2015-05-14 17:24:31 : 用 yadayada 完成
所以我的问题是,我如何获取 R 正在执行的内容,以便我可以将执行的表达式存储在日志/数据库中。并且不必在每个表达式之前编写函数调用(如 myhandler(x
【问题讨论】:
-
R CMD BATCH filename.R命令行会生成一个.Rout文件,其中包含您所要求的内容。 -
我对 .Rout 或 Rscript myscript > mylog.log 传输的内容不感兴趣。我对表达式很感兴趣。
-
R CMD BATCH也写入表达式。你试过了吗? -
是的,我试过 R CMD BATCH。但我需要运行的表达式,以便我可以将它们一一存储在日志数据库中,因为它们由 R 解释器运行。
-
那么您是在寻找 Sweave 还是 knitr?