gpt4 book ai didi

r - 多核生成图

转载 作者:行者123 更新时间:2023-12-01 07:27:50 25 4
gpt4 key购买 nike

我有一个 for通过 png() 生成的循环和 dev.off()一个绘图并将其保存在工作目录中。

我的循环类似于以下 示例

test.df<-data.frame(id=1:25000, x=rnorm(25000),y=rnorm(25000))

for (i in test.df$id){
plot(test.df$x[test.df$id==i], test.df$y[test.df$id==i], xlab="chi",ylab="psi")
}
for循环将运行并生成数千个图。是否可以让它在我系统的所有 8 个内核上并行运行,以便我可以更快地获得绘图?

附注。代码是 示例 .我原来的问题和情节要复杂得多。不要在这个例子上传播病毒。

最佳答案

如果您使用的是新版本的 R,那么这应该很简单。诀窍是创建一个可以以任何顺序在任何内核上运行的函数。首先我们创建我们的数据框:

test.df = data.frame(id=1:250, x=rnorm(250),y=rnorm(250))

接下来我们创建在每个内核上运行的函数:
#I could also pass the row or the entire data frame
myplot = function(id) {
fname = paste0("/tmp/plot", id, ".png")
png(fname)
plot(test.df$x[id], test.df$y[id],
xlab="chi",ylab="psi")
dev.off()
return(fname)
}

然后我加载 parallel包(这带有基础 R)
library(parallel)

然后使用 mclapply
no_of_cores = 8
##Non windows
mclapply(1:nrow(test.df), myplot,
mc.cores = no_of_cores)

##All OS's
cl = makeCluster(no_of_cores)
clusterExport(cl, "test.df")
parSapply(cl, 1:nrow(test.df), myplot)
stopCluster(cl)

这里有两个优点:
  • 包裹parallel R 自带,所以我们不需要安装任何额外的东西
  • 我们可以关闭“并行”部分:
    sapply(1:nrow(test.df), myplot)
  • 关于r - 多核生成图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14550515/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com