稱爲調用,其包括功能的foreach%dopar%從的Optim構造導致錯誤:的R - 與內部功能的foreach%dopar%問題通過的Optim
> workers <- startWorkers(6) # 6 cores
>
> registerDoSMP(workers)
>
> t0 <- Sys.time()
>
> optim(w,maxProb2,control=list(fnscale=-1))
>
> Error in { : task 1 failed - "unused argument(s) (isPrebuilt = TRUE)"
>
> Sys.time()-t0
>
> Time difference of 2.032 secs
>
> stopWorkers(workers)
被調用的函數看起來像這樣:
> maxProb2 <- function(wp) {
>
> r <- foreach (i=s0:s1, .combine=c) %dopar% { pf(i,x[i,5],wp,isPrebuilt=TRUE) }
>
> cat("w=",wp,"max=",sum(r),"\n")
>
> sum(r)
>
> }
pf是一些其他函數,x是一個預先計算的元素的靜態表。
而且調用該函數進行優化,只有一次引起了同樣的錯誤:
> workers <- startWorkers(6) # 6 cores
>
> Warning message:
> In startWorkers(6) : there is an existing doSMP session using doSMP1
>
> registerDoSMP(workers)
>
> maxProb2(w)
> Error in { : task 1 failed - "unused argument(s) (isPrebuilt = TRUE)"
>
> stopWorkers(workers)
有什麼奇怪的,在相同的代碼工作正常時直接調用一個時間(的Optim卡列斯同樣的功能很多次):
> workers <- startWorkers(6) # 6 - ilosc rdzeni
>
> Warning message:
> In startWorkers(6) : there is an existing doSMP session using doSMP1
>
> registerDoSMP(workers)
>
> r <- foreach (i=s0:s1, .combine=c) %dopar% { pf(i,x[i,5],w,isPrebuilt=TRUE) }
>
> sum(r)
> [1] 187.1781
>
> stopWorkers(workers)
當使用%do%代替%dopar%時,被調用函數(maxProb2)可以正常工作。
如何正確調用包含foreach%dopar%構造的函數?
更新2011-07-17:
我已經改名爲PF功能分爲probf但問題仍然存在。
probf函數在腳本中定義,而不是在某些外部包中定義。
有兩點需要注意:操作系統:Windows 7,IDE:革命分析企業4.3
> workers <- startWorkers(workerCount = 3)
>
> registerDoSMP(workers)
>
> maxProb2(w)
>
Error in { : task 1 failed - "could not find function "probf""
請始終在您的問題中包含確切的錯誤信息。 –