R包R.utils
的功能evalWithTimeout
几乎与您所描述的完全相同.如果您不想安装软件包,则evalWithTimeout
依赖于用户友好的R基本功能setTimeLimit
您的代码看起来像这样:
library(R.utils) slow.func <- function(x){ Sys.sleep(10) return(x^2) } fast.func <- function(x){ Sys.sleep(2) return(x*x) } interruptor = function(FUN,args, time.limit, ALTFUN){ results <- NULL results <- evalWithTimeout({FUN(args)},timeout=time.limit,onTimeout="warning") if(results==NULL){ results <- ALTFUN(args) } return(results) } interruptor(slow.func,args=2,time.limit=3,fast.func)