是否可以在Windows上使用R调查包的svyby`函数multicore =参数?

时间:2014-07-14 13:03:09

标签: r parallel-processing fork survey

能够在Windows上进行多线程会很棒,但也许这个问题比我想象的更难...... :(

survey:::svyby.default内部有一个块,lapplymclapply取决于multicore=TRUE和您的操作系统。无论如何,Windows用户都被强制进入lapply循环,我想知道是否有任何方法可以沿着mclapply路径前进......加快计算速度。

我不太了解并行处理的内部,但我做了一些实验,看看是否有任何Windows可接受的替代方案可行。首先我尝试用

覆盖mclapply
mclapply <- 
    function( X , FUN , ... ){ 
        clusterApply( 
            x = X , 
            fun = FUN , 
            cl = makeCluster( detectCores() ) , ... ) 
    }

接下来我使用fixInNamespace( svyby.default , "survey" )删除该行     if (multicore) parallel:::closeAll()

但这只让我到了

的地步
> svyby(~api99, ~stype, dclus1, svymean , multicore=TRUE )
Error in checkForRemoteErrors(val) :
  3 nodes produced errors; first error: object 'svymean' not found

1 个答案:

答案 0 :(得分:4)

引用R survey包裹的作者Thomas Lumley博士回应我的询问 -

  

没有。这种并行化的方法依赖于分叉,即Windows   不支持。

     

有必要重写它以使用clusterApply(),我就是   非常确定通信开销会消耗速度增益。同   forking,子进程获取父进程数据的副本   免费 - 全部由虚拟&lt; - &gt;物理内存翻译完成   硬件 - 但使用集群方法R必须将数据发送到   儿童过程明确。