4

假设我的可执行文件是c:\my irectory\myfile.exe并且我的 R 脚本调用了这个可执行文件system(myfile.exe)

R 脚本为可执行程序提供参数,可执行程序使用它们进行数值计算。从可执行文件的输出中,R 脚本然后测试参数是否正确。如果它们不好,则更改参数并使用更新的参数重新运行可执行文件。

现在,由于这个可执行文件执行数学计算并且解决方案可能只会缓慢收敛,我希望能够在执行计算需要很长时间(比如 5 秒)时终止可执行文件

我该如何做这个时间依赖的杀戮?

PS:我的问题与这个有点相关:(时间非依赖终止) 如何运行可执行文件,然后在 Windows 中用 R 终止或终止同一个进程

4

2 回答 2

4

您可以将代码添加到R发出可执行调用的函数中:

setTimeLimit(elapse=5, trans=T)

这将杀死调用函数,将控制权返回给父环境(也可能是一个函数)。然后使用您链接到的问题中的示例进行进一步的工作。

或者,设置一个循环来检查Sys.time,如果 5 秒后对参数集的预期更新没有发生,则中断循环并发出 system kill 命令终止myfile.exe

于 2013-07-15T11:36:51.397 回答
2

可能有更好的方法,但它是一个解决方案。

这里的假设是,myfile.exe 在 5 秒内成功完成计算

try.wtl <- function(timeout = 5)
{
      y <- evalWithTimeout(system(myfile.exe), timeout = timeout, onTimeout= "warning")
      if(inherits(y, "try-error")) NA else y 
}

案例1(计算成功后关闭myfile.exe)

g <- try.wtl(5)

案例2(计算成功后myfile.exe没有关闭)

g <- try.wtl(0.1)

案例 2 从头开始​​需要 MSDOS taskkill

if (class(g) == "NULL") {system('taskkill /im "myfile.exe" /f',show.output.on.console = FALSE)}

PS:灵感来自Time out an R command via try()

于 2013-07-15T14:56:34.923 回答