使用简单的测试功能
timefoo<-function(x,trans=TRUE){
setTimeLimit(elapse=4, transient=trans)
warning('starting...')
Sys.sleep(x)
warning('woke up')
return(x)
}
当我调用时,函数会正确终止,例如timefoo(5)
,但是:
timefoo(3)
[1] 3
Warning messages:
1: In timefoo(3) : starting...
2: In timefoo(3) : woke up
Error: reached elapsed time limit
有人可以解释到底发生了什么吗?就好像在完成并退出setTimeLimit
后继续运行。timefoo
设置transient=FALSE
更糟,因为它会为我的控制台命令设置超时,并在每个命令后(加上 4 秒)给我错误消息。
编辑:为了回答 Gavin 的问题,这里有两个电话的序列
Rgames> timefoo(5)
Error in Sys.sleep(x) : reached elapsed time limit
In addition: Warning message:
In timefoo(5) : starting...
Rgames> timefoo(3)
[1] 3
Warning messages:
1: In timefoo(3) : starting...
2: In timefoo(3) : woke up
Error: reached elapsed time limit
我在命令之间手动等待了 10 秒,所以毫无疑问最终的错误消息是由于timefoo(3)
调用造成的。是否有任何我可能弄乱的 R_ENVIRON 变量导致了这种行为?到目前为止,我只在 Windows7、R64 上对此进行了测试。