Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 进行并行复制的最简单方法_R_Parallel Processing - Fatal编程技术网

R 进行并行复制的最简单方法

R 进行并行复制的最简单方法,r,parallel-processing,R,Parallel Processing,我喜欢R中的并行软件包,以及做应用,sapply等的并行版本是多么容易和直观 replicate是否有类似的并行函数?您可以使用并行版本的lappy或sapply,而不是说在1:n上执行应用时复制此表达式n,而不是给出表达式,将该表达式包装到忽略发送给它的参数的函数中 可能是这样的: #create cluster library(parallel) cl <- makeCluster(detectCores()-1) # get library support needed to r

我喜欢R中的
并行
软件包,以及做
应用
sapply
等的并行版本是多么容易和直观


replicate
是否有类似的并行函数?

您可以使用并行版本的
lappy
sapply
,而不是说在
1:n
上执行应用时复制此表达式
n
,而不是给出表达式,将该表达式包装到忽略发送给它的参数的函数中

可能是这样的:

#create cluster
library(parallel)
cl <- makeCluster(detectCores()-1)  
# get library support needed to run the code
clusterEvalQ(cl,library(MASS))
# put objects in place that might be needed for the code
myData <- data.frame(x=1:10, y=rnorm(10))
clusterExport(cl,c("myData"))
# Set a different seed on each member of the cluster (just in case)
clusterSetRNGStream(cl)
#... then parallel replicate...
parSapply(cl, 1:10000, function(i,...) { x <- rnorm(10); mean(x)/sd(x) } )
#stop the cluster
stopCluster(cl)
#创建集群
图书馆(平行)

cl使用
clusterEvalQ
作为一个模型,我想我应该实现一个并行的
replicate
,如下所示:

parReplicate <- function(cl, n, expr, simplify=TRUE, USE.NAMES=TRUE)
  parSapply(cl, integer(n), function(i, ex) eval(ex, envir=.GlobalEnv),
            substitute(expr), simplify=simplify, USE.NAMES=USE.NAMES)
软件包提供了一个插件来替换并行运行的
replicate()
,并使用统计声音并行随机数生成:

库(future.apply)
计划(多段,工人=4)

y谢谢,当我读到复制只是sapply的包装时,我就这样做了。@D1X,你试过代码了吗?当我按原样运行它时,我看到10000个唯一的值,没有重复。但我在windows上进行了测试,它只生成,而不是分叉。如果使用分叉而不是繁殖来创建集群,并且在父集群中设置了种子,则可能会得到重复的。我在上面添加了一个调用,在每个子进程上显式地设置随机种子,以防万一(并做了一些其他小的更改,使代码可以按原样运行)。是的,这是通过种子设置修复的(是的,我在Linux中运行了这个)。非常感谢。
parReplicate <- function(cl, n, expr, simplify=TRUE, USE.NAMES=TRUE)
  parSapply(cl, integer(n), function(i, ex) eval(ex, envir=.GlobalEnv),
            substitute(expr), simplify=simplify, USE.NAMES=USE.NAMES)
library(parallel)
cl <- makePSOCKcluster(3)
hist(parReplicate(cl, 100, mean(rexp(10))))