假設我在腳本中有一堆R代碼,並且想要將所有從.GlobalEnv運行的R代碼記錄到平面文件或數據庫以及錯誤和警告消息。 如下,我可以寫一個簡單的logme功能或使之更加複雜一點也獲取錯誤改變options(error = mylogginfunction)
獲取運行時運行的所有R代碼
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年5月14日17點24分31秒:啓動了一些yadayada,2015-05-14 17:24:31:用yadayada完成
但我想要的是,日誌文件寫下執行的表達式,而不必我寫每個包裝器聲明。 我希望日誌看起來像。 2015年5月14日17時24分31秒:開始有些yadayada,X < - 10,X * 72015年5月14日17時24分31秒:以yadayada做
所以我問題是,我如何獲取R正在執行的內容,以便將執行的表達式存儲在日誌/數據庫中。而不需要在每個表達式之前寫一個函數調用(如myhandler(x < - 10); myhandler(x * 10))。 對此有何幫助?
'R CMD BATCH filename.R'命令行產生一個似乎你問的'.Rout'文件。 – nicola
我對.Rout或Rscript myscript> mylog.log管道是什麼感興趣。我對錶達感興趣。 – jwijffels
'R CMD BATCH'也寫入表達式。你試過了嗎? – nicola