首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在windows上如何在r中实现并行化?

在windows上如何在r中实现并行化?
EN

Stack Overflow用户
提问于 2014-05-29 13:32:17
回答 6查看 34.5K关注 0票数 37

在Windows中,如何让代码在r中并行化?包括一个简单示例。张贴这个自我回答的问题,因为这是相当不愉快的工作。你会发现package parallel本身不能工作,但是package snow工作得很好。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-05-29 13:32:17

发布这篇文章是因为我花了很长时间才弄明白。这里有一个在r中并行化的简单示例,它将让您测试事情是否适合您,并让您走上正确的道路。

代码语言:javascript
运行
复制
library(snow)
z=vector('list',4)
z=1:4
system.time(lapply(z,function(x) Sys.sleep(1)))
cl<-makeCluster(###YOUR NUMBER OF CORES GOES HERE ###,type="SOCK")
system.time(clusterApply(cl, z,function(x) Sys.sleep(1)))
stopCluster(cl)

您还应该使用库doSNOW将foreach注册到snow集群,这将导致许多包自动并行化。注册的命令是registerDoSNOW(cl) (其中clmakeCluster()的返回值),撤消注册的命令是registerDoSEQ()。别忘了关闭你的集群。

票数 47
EN

Stack Overflow用户

发布于 2015-05-07 21:02:41

这对我来说很有效,我使用了doParallel包,需要3行代码:

代码语言:javascript
运行
复制
# process in parallel
library(doParallel) 
cl <- makeCluster(detectCores(), type='PSOCK')
registerDoParallel(cl)

# turn parallel processing off and run sequentially again:
registerDoSEQ()

随机森林的计算从180秒减少到120秒(在具有4个内核的Windows计算机上)。

票数 18
EN

Stack Overflow用户

发布于 2015-01-17 22:16:38

基于here的信息,我能够将以下代码转换为在Windows7上的R Studio下工作的并行版本。

原始代码:

代码语言:javascript
运行
复制
#
# Basic elbow plot function
#
wssplot <- function(data, nc=20, seed=1234){
    wss <- (nrow(data)-1)*sum(apply(data,2,var))
    for (i in 2:nc){
        set.seed(seed)
        wss[i] <- sum(kmeans(data, centers=i, iter.max=30)$withinss)}
    plot(1:nc, wss, type="b", xlab="Number of clusters", 
       ylab="Within groups sum of squares")
}

并行化代码:

代码语言:javascript
运行
复制
library("parallel")

workerFunc <- function(nc) {
  set.seed(1234)
  return(sum(kmeans(my_data_frame, centers=nc, iter.max=30)$withinss)) }

num_cores <- detectCores()
cl <- makeCluster(num_cores)
clusterExport(cl, varlist=c("my_data_frame")) 
values <- 1:20 # this represents the "nc" variable in the wssplot function
system.time(
  result <- parLapply(cl, values, workerFunc) )  # paralel execution, with time wrapper
stopCluster(cl)
plot(values, unlist(result), type="b", xlab="Number of clusters", ylab="Within groups sum of squares")

这并不意味着它是完美的,甚至是最好的,只是一个初学者演示了并行似乎确实在Windows下工作。希望能有所帮助。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23926334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档