Предположим, что у меня есть куча R-кода в script, и я хочу записать весь R-код, который запускается из .GlobalEnv, в плоский файл или базу данных вместе с ошибками и предупреждениями.
Я мог бы написать простую функцию 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)). Любая помощь по этому поводу?