运行文档中的doRedis示例时出现TryCatch和names错误

运行文档中的doRedis示例时出现TryCatch和names错误,r,parallel-processing,redis,cluster-computing,r-doredis,R,Parallel Processing,Redis,Cluster Computing,R Doredis,我正试图使用doRedis创建一个R集群,并用foreach并行处理一些计算,但总是出错。我的代码与foreach%do%一起工作,但当我尝试在具有%dopar%的集群上运行时,它失败了。我还尝试在doRedis文档中运行示例代码,但也失败了。下面是我的主脚本和工作程序的R控制台: 主R控制台: > require('doRedis') > registerDoRedis('work') > getDoParWorkers() [1] 2 > foreach(j=1:10

我正试图使用doRedis创建一个R集群,并用foreach并行处理一些计算,但总是出错。我的代码与foreach%do%一起工作,但当我尝试在具有%dopar%的集群上运行时,它失败了。我还尝试在doRedis文档中运行示例代码,但也失败了。下面是我的主脚本和工作程序的R控制台:

主R控制台:

> require('doRedis')
> registerDoRedis('work')
> getDoParWorkers()
[1] 2
> foreach(j=1:10,.combine=sum,.multicombine=TRUE) %dopar%
+ 4*sum((runif(1000000)^2 + runif(1000000)^2)<1)/10000000
[1] "interrupt: \n"
Error in tryCatchOne(expr, names, parentenv, handlers[[1L]]) : 
  attempt to apply non-function
In addition: Warning message:
In e$fun(obj, substitute(ex), parent.frame(), e$data) :
  Queue length off by 10...correcting
>需要('doRedis')
>registerDoRedis(“工作”)
>getDoParWorkers()
[1] 2
>foreach(j=1:10,.combine=sum,.multicombine=TRUE)%dopar%
+4*总和((runif(1000000)^2+runif(1000000)^2)需要('doRedis'))
>工人(‘工作’)
等待多雷迪斯的工作。
正在处理队列工作中的作业3

名称错误(z)您的示例的一个问题是没有在foreach循环体周围使用大括号。因为
%dopar%
%do%
是二进制运算符,所以需要确保整个foreach循环体被视为
%dopar%
运算符的正确参数。在您的例子中,foreach循环体是ch循环只是
4
。通过使用大括号(或圆括号),可以解决该问题:

foreach(j=1:10,.combine=sum,.multicombine=TRUE) %dopar% {
  4*sum((runif(1000000)^2 + runif(1000000)^2)<1)/10000000
}
foreach(j=1:10,.combine=sum,.multicombine=TRUE)%dopar%{

4*sum((runif(1000000)^2+runif(1000000)^2)我想我发现了问题。我使用brew安装了redis server。我在没有brew的情况下重新安装了redis server,并在配置文件中将超时设置为0。现在,当我运行作业时,工人输出:

`Waiting for doRedis jobs.
 Processing job  3  from queue  works 
 Processing task 10 ... from queue works jobID 3 
 Processing job  3  from queue  works 
 Processing task 100 ... from queue works jobID 3 
 Processing job  3  from queue  works 
 Processing task 13 ... from queue works jobID 3 
 Processing job  3  from queue  works 
 Processing task 14 ... from queue works jobID 3 
 Processing job  3  from queue  works 
 Processing task 16 ... from queue works jobID 3 
 Processing job  3  from queue  works 
 Processing task 18 ... from queue works jobID 3 
 Processing job  3  from queue  works 
 Processing task 2 ... from queue works jobID 3 
 Processing job  3  from queue  works 
 Processing task 21 ... from queue works jobID 3 
 [1] "Empty"`

我返回了一个空字符串,但我认为这是因为我编写函数并将其传递给foreach的方式有错误。

我对{}感到厌倦,但仍然得到相同的错误:名称错误(z)@NathanWadhwani问题可能是由doRedis中的错误引起的。您使用的是什么版本的doRedis和rredis?doRedis:1.1.1和rredis:1.6.8。我在带有brew的mac上安装了redis,并认为这是问题所在。我想我通过在没有brew的osx上安装redis并在redis配置文件中将超时设置为0来修复了问题。这是很可能是问题的原因。据报道,已经提出了一些修补程序:我无法编译它,尽管这似乎在新发布的rredis 1.6.9中得到了修复。(可能包括提到的修补程序,因此不再需要。)
foreach(j=1:10,.combine=sum,.multicombine=TRUE) %dopar% {
  4*sum((runif(1000000)^2 + runif(1000000)^2)<1)/10000000
}
`Waiting for doRedis jobs.
 Processing job  3  from queue  works 
 Processing task 10 ... from queue works jobID 3 
 Processing job  3  from queue  works 
 Processing task 100 ... from queue works jobID 3 
 Processing job  3  from queue  works 
 Processing task 13 ... from queue works jobID 3 
 Processing job  3  from queue  works 
 Processing task 14 ... from queue works jobID 3 
 Processing job  3  from queue  works 
 Processing task 16 ... from queue works jobID 3 
 Processing job  3  from queue  works 
 Processing task 18 ... from queue works jobID 3 
 Processing job  3  from queue  works 
 Processing task 2 ... from queue works jobID 3 
 Processing job  3  from queue  works 
 Processing task 21 ... from queue works jobID 3 
 [1] "Empty"`