gpt4 book ai didi

performance - R 批处理模式下的回显时间戳

转载 作者:行者123 更新时间:2023-12-02 20:57:30 25 4
gpt4 key购买 nike

我想更好地了解以批处理模式运行时 R 脚本中语句的执行持续时间。有什么好的办法吗?

我有一个想法,我希望看到这件事完成。批量执行时,源将回显到指定的日志文件。有没有办法让它在该日志文件中的源代码旁边回显时间戳?

> R CMD BATCH script.R script.Rout

这是我今天看到的输出。

> tail -f script.Rout
...
> # features related to the date
> trandateN <- as.integer(trandate)
> dayOfWeek <- as.integer(wday(trandate))
> holiday <- mapply(isHoliday, trandate)

我想看到类似的东西......

> tail -f script.Rout
...
2013-06-27 11:18:01 > # features related to the date
2013-06-27 11:18:01 > trandateN <- as.integer(trandate)
2013-06-27 11:18:05 > dayOfWeek <- as.integer(wday(trandate))
2013-06-27 11:19:02 > holiday <- mapply(isHoliday, trandate)

最佳答案

您可以按如下方式使用addTaskCallback来创建每个顶级执行的日志。

.log <- data.frame(time=character(0), expr=character(0))
.logger <- function(expr, value, ok, visible) { # formals described in ?addTaskCallback
time <- as.character(Sys.time())
expr <- deparse(expr)
.log <<- rbind(.log, data.frame(time, expr))
return(TRUE) # required of task callback functions
}
.save.log <- function() {
if (exists('.logger')) write.csv(.log, 'log.csv')
}
addTaskCallback(.logger)

x <- 1:10
y <- mean(x)

.save.log()
.log
# time expr
# 1 2013-06-27 12:01:45.837 addTaskCallback(.logger)
# 2 2013-06-27 12:01:45.866 x <- 1:10
# 3 2013-06-27 12:01:45.876 y <- mean(x)
# 4 2013-06-27 12:01:45.900 .save.log()

当然,您可以保持连接打开并直接写入文件,而不是犯下逐行增长 data.frame 的大罪, on.exit

如果你想保持整洁,你可以将日志记录设置很好地打包到一个函数中。

.log <- function() {
.logger <<- local({
log <- data.frame(time=character(0), expr=character(0))
function(expr, value, ok, visible) {
time <- as.character(Sys.time())
expr <- deparse(expr)
log <<- rbind(log, data.frame(time, expr))
return(TRUE)
}
})
invisible(addTaskCallback(.logger))
}

.save.log <- function() {
if (exists('.logger'))
write.csv(environment(.logger)$log, 'log.csv')
}

.log()
x <- 1:10
y <- mean(x)
.save.log()

关于performance - R 批处理模式下的回显时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17347131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com