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

R語言常用兩種并行方法之snowfall詳解

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

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

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

針對上篇中的簡單例子

首先是一個最簡單的并行的例子,這個例子不需要載入任何依賴庫、函數(shù)、對象等。相對也比較簡單:

library(snowfall)  # 載入snowfall包

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

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

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

語法基本也比較好理解,代碼中的注釋也有進行說明。sfLapply()的操作是與lapply()相對應的。類似地,還有sfSapply(),sfApply()等函數(shù),其用法與apply組中的函數(shù)一致。

snowfall進階

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

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

n <- 100
m <- 100

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

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

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

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

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

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

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

其實很簡單,對于并行函數(shù)依賴的庫,就是sfLibrary()進行載入,所以來的對象以及函數(shù)則使用sfExport()進行載入。

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

下面我們再來看看如何查看并行進度:

使用sfCat查看并行進度

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

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

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",這個表示其顯示的進度會儲存在test.txt文件中,其余部分基本沒什么變化。

與Rcpp結(jié)合會遇到的問題

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

這里使用了兩種方法來進行嘗試:

使用sfSource('myCppfun.cpp')進行導入,會在導入的時候直接報錯。

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

所以遇到這種問題,只能將我們的C++代碼中的函數(shù)打包成一個包,然后直接在使用snowfall進行并行時,調(diào)取這個包來運行則不會報錯。

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

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

相關(guān)文章

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

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

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

    輕松學會R語言識別Excel日期

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

    R語言學習VennDiagram包繪制韋恩圖示例

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

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

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

    使用R語言繪制棒棒糖圖火柴桿圖教程

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

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

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

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

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

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

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

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

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

    R語言ggplot2圖例標簽、標題、順序修改和刪除操作實例

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

最新評論