R语言 使用 “parallel “进行并行处理

R语言 使用 “parallel “进行并行处理

并行处理允许你的应用程序在更短的时间内完成更多的任务。这些有助于解决重大问题。在这篇文章中,我们将看看如何使用R编程语言中的 并行 库进行并行处理。

使用并行库

并行是一个基础包,包含在R 2.14.0中。它扩展了CRAN包multicore和snow的工作,并为这些包的大部分功能提供了落地的替代。

你可以使用下面的命令导入该库。

library(parallel)

你也可以用这个库来检查你系统中的核心数量。下面的代码也是这样做的。

library(parallel)
detectCores()

输出

8

平行化的方法

代码的并行化主要有两种方式:一是使用套接字,二是通过分叉。

使用parLapply()的套接字

这种并行处理方式比较慢,也比较难用。我们将使用的标准程序如下。

  • 启动一个n个节点的集群。
  • 在每个节点上运行任何必要的预处理代码。
  • 用parapply来代替apply。
  • 销毁该集群。

让我们通过一个例子来更好地理解这一点。出于演示的目的,我将找到数字1到5的正方形和立方体。

下面的代码可以完成这个工作。

lapply(1:5, function(x) median(rnorm(x*100)))

输出

在R中使用 parallel 进行并行处理

如果我们将测量运行这个的时间,我们将得到。

time_taken <- system.time(
    lapply(1:5, function(x) c(x^2,x^3)) 
)
  
time_taken

输出

在R中使用 parallel 进行并行处理

现在让我们以并行的方式完成同样的任务。下面的代码利用并行库来执行同样的操作。

library(parallel)
   
no_cores <- detectCores()
   
# Creating a cluster with the number of cores
clust <- makeCluster(no_cores)
  
# Using parLapply instead of lapply
parLapply(clust,
          1:5, function(x) median(rnorm(x*100)))

输出

在R中使用 parallel 进行并行处理

如果我们现在测量它的执行时间,我们将得到。

library(parallel)
  
no_cores <- detectCores()
   
clust <- makeCluster(no_cores)
  
time_taken <- system.time(
    parLapply(clust,1:5, function(x) median(rnorm(x*100)))
)
  
time_taken

输出

在R中使用 parallel 进行并行处理

正如你所注意到的,第二种方法比第一种方法花费的时间更少。

用mclapply分叉

在这个方法中,我将利用mclapply()方法。我们将通过与上一节相同的例子,但是,在这里我们将使用mclapply()方法而不是lapply()方法。

library(parallel)
  
mclapply(1:5, function(x) median(rnorm(x*100)))

输出

在R中使用 parallel 进行并行处理

如果我们现在要测量执行时间,我们会得到。

library(parallel)
  
time_taken <- system.time(
    mclapply(1:5, function(x) median(rnorm(x*100))) 
)
  
time_taken

输出

在R中使用 parallel 进行并行处理

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程