欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

R語(yǔ)言常用兩種并行方法之snowfall詳解

 更新時(shí)間:2021年11月08日 09:53:39   作者:Kanny廣小隸  
這篇文章主要為大家介紹了R語(yǔ)言常用兩種并行方法之snowfall詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

上一篇博客(R中兩種常用并行方法之parallel)中已經(jīng)介紹了R中常見(jiàn)的一種并行包:parallel,其有著簡(jiǎn)單便捷等優(yōu)勢(shì),其實(shí)缺點(diǎn)也是非常明顯,就是很不穩(wěn)定。很多時(shí)候我們將大量的計(jì)算任務(wù)掛到服務(wù)器上進(jìn)行運(yùn)行時(shí),更看重的是其穩(wěn)定性。

這時(shí)就要介紹R中的另一個(gè)并行利器——snowfall,這也是在平時(shí)做模擬時(shí)用的最多的一種方法。

針對(duì)上篇中的簡(jiǎn)單例子

首先是一個(gè)最簡(jiǎn)單的并行的例子,這個(gè)例子不需要載入任何依賴(lài)庫(kù)、函數(shù)、對(duì)象等。相對(duì)也比較簡(jiǎn)單:

library(snowfall)  # 載入snowfall包

# 并行初始化
sfInit(parallel = TRUE, cpus = detectCores() - 1)

# 進(jìn)行l(wèi)apply的并行操作
sfLapply(1:3, function(x) c(x, x ^ 2, x ^ 3))

# 結(jié)束并行,返還內(nèi)存等資源
sfStop()

語(yǔ)法基本也比較好理解,代碼中的注釋也有進(jìn)行說(shuō)明。sfLapply()的操作是與lapply()相對(duì)應(yīng)的。類(lèi)似地,還有sfSapply(),sfApply()等函數(shù),其用法與apply組中的函數(shù)一致。

snowfall進(jìn)階

在實(shí)際操作時(shí),我們進(jìn)行的函數(shù)往往沒(méi)有這么簡(jiǎn)單,往往還需要依賴(lài)一些其它的函數(shù)、變量、R包等,這時(shí)就不能用上述的方法簡(jiǎn)單的進(jìn)行操作了。

下面給出一個(gè)具體實(shí)際的操作案例,來(lái)展示如何載入函數(shù)中依賴(lài)的對(duì)象等參數(shù)。

n <- 100
m <- 100

fun1 <- function(...) {
  ...
}

fun2 <- function(...) {
  ...
}

sfInit(parallel = TRUE, cpus = 10) #初始化

sfLibrary(MASS)     # 載入依賴(lài)R包MASS
sfLibrary(ggplot2)  # 載入依賴(lài)R包ggplot2

sfExport("n", "m")         # 載入依賴(lài)的對(duì)象
sfExport("fun1", "fun2")   # 載入依賴(lài)的函數(shù)

# 并行計(jì)算
result <- sfLapply(1:10000, myfun) 
# 注意:myfun是自己定義的函數(shù),里面需要用到包MASS, ggplot2;變量m, n;函數(shù)fun1, fun2。

sfStop() # 結(jié)束并行

其實(shí)很簡(jiǎn)單,對(duì)于并行函數(shù)依賴(lài)的庫(kù),就是sfLibrary()進(jìn)行載入,所以來(lái)的對(duì)象以及函數(shù)則使用sfExport()進(jìn)行載入。

當(dāng)函數(shù)或者對(duì)象非常多時(shí),不方便一個(gè)一個(gè)單獨(dú)輸入,這時(shí)我們可將所有的對(duì)象與函數(shù)存到allfun.R文件夾中,然后再采用sfSource('allfun.R')將所有的對(duì)象與函數(shù)進(jìn)行導(dǎo)入,方便快捷。

下面我們?cè)賮?lái)看看如何查看并行進(jìn)度:

使用sfCat查看并行進(jìn)度

這部分參考:How to output a message in snowfall?

我們只需在函數(shù)中添加sfCat()函數(shù),即可查看并行進(jìn)度,其示例代碼如下所示:

sfInit(parallel = TRUE, cpus = 2, slaveOutfile = "test.txt")
sfLibrary(snowfall)

res <- sfLapply(1:100, function(x) {
  sfCat(paste("Iteration ", x), sep = "\n")
})

sfStop()

需要注意的是,在初始化并行中,我們多加了一串命令:slaveOutfile = "test.txt",這個(gè)表示其顯示的進(jìn)度會(huì)儲(chǔ)存在test.txt文件中,其余部分基本沒(méi)什么變化。

與Rcpp結(jié)合會(huì)遇到的問(wèn)題

當(dāng)我們進(jìn)行模擬想要再次進(jìn)行提速時(shí),通常都會(huì)使用Rcpp將我們的R代碼改成C++代碼。平時(shí)在我們使用的時(shí)候,直接使用Rcpp::sourceCpp()就可以直接將我們的C++代碼中的函數(shù)進(jìn)行導(dǎo)入,然想要使用snowfall進(jìn)行并行時(shí)則會(huì)遇到問(wèn)題。

這里使用了兩種方法來(lái)進(jìn)行嘗試:

使用sfSource('myCppfun.cpp')進(jìn)行導(dǎo)入,會(huì)在導(dǎo)入的時(shí)候直接報(bào)錯(cuò)。

先使用Rcpp::sourceCpp('myCppfun.cpp')將函數(shù)讀入變量空間,然后再使用sfExport("myCppfun")將函數(shù)。這樣做在最后運(yùn)行代碼的時(shí)候會(huì)報(bào)錯(cuò)。

所以遇到這種問(wèn)題,只能將我們的C++代碼中的函數(shù)打包成一個(gè)包,然后直接在使用snowfall進(jìn)行并行時(shí),調(diào)取這個(gè)包來(lái)運(yùn)行則不會(huì)報(bào)錯(cuò)。

關(guān)于如何制作自己的R包,可參考:RStudio制作包含Rcpp代碼的R包。

以上就是R語(yǔ)言常用兩種并行方法之snowfall詳解的詳細(xì)內(nèi)容,更多關(guān)于R語(yǔ)言并行snowfall方法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • R語(yǔ)言中cbind、rbind和merge函數(shù)的使用與區(qū)別

    R語(yǔ)言中cbind、rbind和merge函數(shù)的使用與區(qū)別

    這篇文章主要介紹了R語(yǔ)言中cbind、rbind和merge函數(shù)的使用與區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 輕松學(xué)會(huì)R語(yǔ)言識(shí)別Excel日期

    輕松學(xué)會(huì)R語(yǔ)言識(shí)別Excel日期

    想知道如何用R語(yǔ)言識(shí)別Excel中的日期嗎?別擔(dān)心,我們有你需要的全部信息!本指南將向你展示如何使用R語(yǔ)言輕松識(shí)別Excel表格中的日期數(shù)據(jù),讓你在數(shù)據(jù)分析中游刃有余,快來(lái)掌握這一技巧,讓數(shù)據(jù)處理更加高效!
    2023-12-12
  • R語(yǔ)言學(xué)習(xí)VennDiagram包繪制韋恩圖示例

    R語(yǔ)言學(xué)習(xí)VennDiagram包繪制韋恩圖示例

    這篇文章主要為大家介紹了R語(yǔ)言學(xué)習(xí)VennDiagram包繪制韋恩圖示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • R語(yǔ)言條形圖創(chuàng)建方法

    R語(yǔ)言條形圖創(chuàng)建方法

    在本篇文章里小編給大家整理的是一篇關(guān)于R語(yǔ)言條形圖創(chuàng)建方法,有需要的朋友們可以跟著學(xué)習(xí)參考下。
    2021-04-04
  • 使用R語(yǔ)言繪制棒棒糖圖火柴桿圖教程

    使用R語(yǔ)言繪制棒棒糖圖火柴桿圖教程

    本篇文章為大家介紹幾種利用R語(yǔ)言繪制棒棒糖圖(火柴桿圖)的方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-11-11
  • R語(yǔ)言中的五種常用統(tǒng)計(jì)分析方法

    R語(yǔ)言中的五種常用統(tǒng)計(jì)分析方法

    這篇文章主要介紹了R語(yǔ)言中的五種常用統(tǒng)計(jì)分析方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • R繪制漂亮的中國(guó)地圖的實(shí)現(xiàn)示例

    R繪制漂亮的中國(guó)地圖的實(shí)現(xiàn)示例

    本文主要介紹了R繪制漂亮的中國(guó)地圖的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • R語(yǔ)言:數(shù)據(jù)篩選match的使用詳解

    R語(yǔ)言:數(shù)據(jù)篩選match的使用詳解

    這篇文章主要介紹了R語(yǔ)言:數(shù)據(jù)篩選match的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • R語(yǔ)言中c()函數(shù)與paste()函數(shù)的區(qū)別說(shuō)明

    R語(yǔ)言中c()函數(shù)與paste()函數(shù)的區(qū)別說(shuō)明

    這篇文章主要介紹了R語(yǔ)言中c()函數(shù)與paste()函數(shù)的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • R語(yǔ)言ggplot2圖例標(biāo)簽、標(biāo)題、順序修改和刪除操作實(shí)例

    R語(yǔ)言ggplot2圖例標(biāo)簽、標(biāo)題、順序修改和刪除操作實(shí)例

    R語(yǔ)言中畫(huà)圖時(shí)我們常常要設(shè)定標(biāo)題,如果圖片標(biāo)題是固定則很容易操作,下面這篇文章主要給大家介紹了關(guān)于R語(yǔ)言ggplot2圖例標(biāo)簽、標(biāo)題、順序修改和刪除操作的相關(guān)資料,需要的朋友可以參考下
    2022-07-07

最新評(píng)論