setTimeLimit如何在R中工作?

Ite*_*tor 11 r timer

我想setTimeLimit()在R中掌握并且我的经验导致了几个相关的问题,所以也许根本问题是:这是如何真正起作用的?(我一直在寻找evalWithTimeout()R.utils,以及,它可能适合我的目的稍微好一点,但它是建立在此功能).

以下是我想弄清楚的关键事项:

  1. 它如何监控经过的时间?即它似乎插入流控制,所以它是如何做到的?能够拥有"后台"流程很酷,可用于报告状态,检查点等.

  2. 我可以确定触发前剩余的时间吗?我意识到我可以将它包装起来并在某处保存在调用点(即输出proc.time())附近消耗的已用时间和CPU时间.但是,这个功能已经在某处存储了这些功能,我想知道在哪里,或者至少知道如何确定剩余的时间.

  3. 如果R控制台空闲,是否可以做一些有用的事情?能够监控elapsed.time()并且cpu.time()非常有用.我希望能够监视R何时处于空闲状态,但似乎需要修改它需要提交或完成命令.而且,仅输出错误不会触发后续操作.(也许我需要更多关注evalWithTimeout.)

  4. 帮助信息表明它可以适用于C或Fortran,但不提供示例.有关如何做到这一点的任何建议?

Jer*_*oen 6

要显示setTimeLimit在C函数调用期间不起作用:

rfunction <- function(){
    repeat{
        x <- rnorm(100);
    }
}

cfunction <- function(){
    x <- eigen(matrix(rnorm(1e6), 1e3));
}

setTimeLimit(3);
system.time(try(rfunction(), silent=TRUE))
system.time(try(cfunction(), silent=TRUE))
Run Code Online (Sandbox Code Playgroud)