denilen işlev içinde foreach% dopar% sorun Foreach% dopar Optim konstruktun bir hataya neden olur:%R - içeren bir işlevinin çağrılması 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)
adlandırılan fonksiyonu gibi görünüyor:
> 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, başka bir işlevdir, x, önceden hesaplanmış öğelerin statik bir tablosudur. işlevini çağırarak Ayrıca
sadece bir kez optimize aynı hataya neden olmak: garip Ne> 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)
aynı kod tek bir zaman (Optim aynı işlevi calles birçok kez) doğrudan aradığında çalışıyor:
> 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)
Çağrılan işlev (maxProb2),% dopar% yerine% do% kullanıldığında iyi çalışır.
Foreach% dopar% construction dahil olmak üzere bir işlevi nasıl doğru şekilde çağırabilirim?
GÜNCELLEME 2011-07-17:
Ben probf içine pf fonksiyonunu yeniden adlandırmış ama sorun olmaya devam etmektedir.
prob fonksiyonları bazı dış paketlerde değil betikte tanımlanmıştır.
İki not: İşletim Sistemi: Windows 7, IDE: Devrim Analitik Kurumsal 4,3
> workers <- startWorkers(workerCount = 3)
>
> registerDoSMP(workers)
>
> maxProb2(w)
>
Error in { : task 1 failed - "could not find function "probf""
Lütfen her zaman sorunuza tam olarak hata mesajını ekleyin. –