R,使用timeOut在foreach中错误'找不到函数'

时间:2018-02-07 09:02:17

标签: r function foreach timeout

我想插入一个foreach超时控件,如下所示:

#Parallel function
runnable_X<-function(ID) {
  require(R.utils)
  Sys.sleep(ID)
  return(ID)
}

#foreach function with timeout
foreach_timeOut<-function() {
  tryCatch({
    require(R.utils)
    withTimeout({

      out_list<-foreach(ID=c(1:20),.options.multicore=list(preschedule=FALSE)) %dopar% runnable_X(ID)

    },
    timeout=5); ### Cumulative Timeout for entire process
  }, TimeoutException=function(ex) {
    return("Time Out!")
  })
} 


library(doParallel)
require(R.utils)

#Parallel registration
registerDoParallel()

#NUmber of cores
options(cores=5)

foreach_timeOut()

我有这个错误:

Error in runnable_X(ID) : 
  task 1 failed - "could not find function "runnable_X""

如果我在runnable_X内声明foreach_timeout函数,则不会发生这种情况,但我不能这样做。

2 个答案:

答案 0 :(得分:1)

如果使用内置函数,则必须将它们添加到集群中:

XorStr( "" )

答案 1 :(得分:1)

感谢@karen提供的帮助(+1),以防我们有一个集群,但我发现这个解决方案更适合我的情况。

export

我将使用我的函数

添加foreach #foreach function with timeout foreach_timeOut<-function() { tryCatch({ require(R.utils) withTimeout({ out_list<-foreach(ID=c(1:20), .options.multicore=list(preschedule=FALSE), .export = c("runnable_X") ) %dopar% runnable_X(ID) }, timeout=5); ### Cumulative Timeout for entire process }, TimeoutException=function(ex) { return("Time Out!") }) } library(doParallel) require(R.utils) #Parallel registration registerDoParallel() #NUmber of cores options(cores=5) foreach_timeOut() [1] "Time Out!" 命令
string registry_key = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";     

其他topic相关。