自动始终在R中计时功能

Pas*_*ten 5 emacs r timing

我把一个Emacs函数一起攻击以便发送

tOne <- proc.time()[3]
Run Code Online (Sandbox Code Playgroud)

在我的"发送到R"键之前,然后是

tTwo <- proc.time()[3]
Run Code Online (Sandbox Code Playgroud)

然后,打印差异.虽然印刷变得非常混乱.

在R中是否有更好的方法来自动计时发送到R的所有内容?(例如在F#中#time "on")


编辑:目前,它发送一些额外的换行符,因为劣质缓冲区需要发送字符串:

> > a<-ocorrelate.parallel(replicate(2, rnorm(100000)), 0.5)


> 
+  user  0.072 sys  0.020 elapsed 14.925 
> > a<-ocorrelate.parallel(replicate(2, rnorm(100000)), 0.5)


> 
+  user  0.088 sys  0.032 elapsed 16.868 
> > 
Run Code Online (Sandbox Code Playgroud)

功能:

(defun ess-timed-cc (vis)
  (interactive "P")
  (process-send-string "R" "tone <- proc.time()[1:3];")
  (ess-eval-region-or-function-or-paragraph-and-step vis)
  (process-send-string "R" "ttwo <- proc.time()[1:3]; cat(paste(c(\"\", 
        format(ttwo-tone)), c(\"user\", \"sys\", \"elapsed\", \"\n\")));")
  (other-window 1)
  (inferior-ess-send-input)
  (inferior-ess-send-input)
  (goto-char (point-max))
  (other-window -1)
  )
Run Code Online (Sandbox Code Playgroud)

Gre*_*now 1

您可以在 R 中打开分析,它会告诉您每个函数花费的相对时间量,这可能就是您想要的。?Rprof详情请参阅。

您还可以使用addTaskCallback添加回调来显示自上一个表达式完成以来的时间,尽管该时间将包括任何空闲时间和键入表达式的时间,而不仅仅是运行时间。如果您已将所有命令都放在文件中并将它们发送到命令行,那么这应该可以很好地工作。

您还可以设置一些挂钩来启动和停止计时,但并非所有函数都有挂钩。

对于 emacs 解决方案,您可以使用它来包装调用,system.time而不是调用proc.time两次并相减。

您还可以使用该函数在您想要计时的每个函数的开头和结尾trace插入 2 个调用。proc.time这将需要您想要计时的函数名称的向量,但这ls可能会有所帮助。