我将Emacs功能混合在一起以便发送
tOne <- proc.time()[3]
在我的“发送到R”键之前,然后是
tTwo <- proc.time()[3]
然后,然后打印差异。然而,印刷变得非常混乱。
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
> >
功能:
(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)
)
答案 0 :(得分:1)
你可以打开R中的分析,它会告诉你在每个函数中花费的相对时间,这可能是你想要的。有关详细信息,请参阅?Rprof
。
您还可以使用addTaskCallback
添加回调以显示自上次表达式完成以来的时间,但此时间将包括任何空闲时间和键入表达式的时间,而不仅仅是运行时间。如果您已将所有命令都存储在文件中并将它们发送到命令行,那么这应该可以很好地工作。
您可以设置一些可以启动和停止计时的挂钩,但并非所有功能都有挂钩。
对于emacs解决方案,您可以使用该解决方案将呼叫包裹在system.time
中,而不是两次调用proc.time
并减去。
您还可以使用trace
函数在您想要计时的每个函数的开头和结尾插入proc.time
的2个调用。这需要一个您想要计算的函数名称的向量,但ls
可以帮助解决这个问题。