找不到r低版本 R的多程序使用與改進

2021-10-14 17:41:57 字數 2903 閱讀 8521

在r中需要使用多程序時,常見方案是使用foreachdoparallel的組合。

foreach包中最重要的是foreach函式,該函式建立乙個foreach物件,隨後序列或並行的執行表示式。

library(foreach)?foreach
out:

foreach(  ...,  .combine,  .init,  .final = null,  .inorder = true,  .multicombine = false,  .maxcombine = if (.multicombine) 100 else 2,  .errorhandling = c("stop", "remove", "pass"),  .packages = null,  .export = null,  .noexport = null,  .verbose = false)e1 %:% e2when(cond)obj %do% exobj %dopar% extimes(n)
foreach函式在建立時常用的幾個引數為:

...: 表示式中使用的變數。

.packages: 表示式依賴的包,字元向量。

.export: 表示式依賴的變數,字元向量。

.combine: 運算後結果的組合方式,預設為列表,可選'c''cbind''rbind''+''*'等。

.errorhandling: 當執行**現錯誤時的處理方式。

使用時,物件後接%do%為序列,%dopar%為並行。

foreach(i=1:3) %do%    sqrt(i)
out:

[[1]][1] 1[[2]][1] 1.414214[[3]][1] 1.732051
當使用%do%執行時,程式將會自動忽略.packages.export變數。

如果需要使用多程序,不只需要更換成%dopar%,你還需要註冊集群,執行,結束集群。

library(doparallel)cl = makecluster(4)  #註冊4個程序的集群registerdoparallel(cl)foreach(i=1:3) %dopar% sqrt(i)stopcluster(cl) # 記得結束集群
對多程序進行包裝,形成runparallel函式。

library(foreach)library(doparallel)runparallel = function(fun,params,packages = null,export = null)   stopcluster(cl)  r}
程式中的do.call能夠使用提供的引數執行fun函式。

runparallel函式傳入fun與並行引數的列表集合params,就可以使用fun對每個值進行處理,然後返回全部值。

在實際使用中遇到這樣乙個問題,在這裡把問題稍微簡化一下。

有兩個檔案,do_some_thing.rdo_some_other_thing.r,裡面各自編寫了乙個函式。

do_some_thing.r

do_some_thing = function(x)
do_some_other_thing.r

do_some_other_thing = function(x)
很明顯,do_some_thing.r中引用了do_some_other_thing.r中的函式。

現在我source這兩個檔案並暴露這兩個函式,編寫乙個函式呼叫do_some_thing

some_thing = new.env()source('do_some_thing.r',local = some_thing)some_other_thing = new.env()source('do_some_other_thing.r',local = some_other_thing)attach(some_thing)attach(some_other_thing)fun = function(x)
然後進行多程序呼叫。

得到錯誤。

error in    r}
runparallel(fun,params)
out:

[[1]][1] 2[[2]][1] 4.5······
成功。

十分推薦dofuture包!

我是sssimon yang,關注我,用code解讀世界

[1]dofuture包: 

恢復低版本的FlashPlayer

做頁遊開發,經常會遇到一些很奇怪的問題。我最近就遇到乙個問題 使用者進入遊戲,只顯示遊戲部分介面,chrome瀏覽器是正常的,就ie死活不行,而我自己的ie卻又是可以的 都是ie8 右擊看了一下flash player的版本號,她的ie8使用的flash player版本號比她本機的chrome要高...

恢復低版本的FlashPlayer

做頁遊開發,經常會遇到一些很奇怪的問題。我最近就遇到乙個問題 使用者進入遊戲,只顯示遊戲部分介面,chrome瀏覽器是正常的,就ie死活不行,而我自己的ie卻又是可以的 都是ie8 右擊看了一下flash player的版本號,她的ie8使用的flash player版本號比她本機的chrome要高...

ubuntu10 04安裝低版本的gcc

ubuntu10.04降低gcc和g 版本的過程 ubuntu10.04的預設安裝是4.4版本的gcc和g 可以通過gcc v命令檢視 下面就進入安裝gcc 3.4.6的過程 gcc 3.4 3.4.6 6ubuntu3 i386.deb cpp 3.4 3.4.6 6ubuntu3 i387.de...