2

我使用 sink() 来记录运行 R-Scripts 的目的,效果很好。

* R> sink(file = paste(Log_Path, FileName), append = TRUE, type = c("output"), split = TRUE)*

我现在正在进行性能测试,需要找出 R-Script 的某些部分运行了多长时间,而无需添加大量的打印语句。

该解决方案通过 RGui 界面起作用:

R> updatePrompt <- function(...) {options(prompt=paste(Sys.time(),"> ")); 返回(真)}

R> addTaskCallback(updatePrompt)

但是,在 R-Server 中运行时,时间提示不会传播回 sink() 的控制台流。

建议?

我已经探索了 txtStart ,但不确定这是否是我需要的。是否有不同的包或选项可以设置在 sink() 控制台输出的提示中设置时间戳?

谢谢你的帮助...

4

2 回答 2

1

提示不是 的一部分stdout,这就是它没有进入接收器的原因。为什么不直接从回调中打印?例如:

make_timing_fun <- function() {
  time.start <- proc.time()
  function(...) {
    new.time <- proc.time()
    print(new.time - time.start)
    time.start <<- new.time
    TRUE
  }
}
addTaskCallback(make_timing_fun()) # note parens used to generate actual function

请注意,这段时间是语句完成之间的时间,因此,如果您只是在控制台周围等待什么也不做,那么这也是时间的一部分。

于 2014-01-02T17:08:04.967 回答
-1

我最初确实尝试过,但我再次尝试了。并收到相同的结果:

日志文件中保存的控制台输出的片段:

> 开始日期 <- as.vector(input_data2)

> input_data3 <- stop_date

> 停止日期 <- as.vector(input_data3)

.

希望是这样的:

2014-01-03 09:07:57 > startdate <- as.vector(input_data2)

2014-01-03 09:07:57 > input_data3 <- stop_date

2014-01-03 09:07:57 > 停止日期 <- as.vector(input_data3)

.

于 2014-01-03T15:07:05.747 回答