parApply的输出与我的输入不同

时间:2014-11-27 15:43:26

标签: r parallel-processing zoo

我还是r的新手(用于在Matlab中编程),我正在尝试使用并行包加速一些计算。下面是一个例子,我试图通过使用动物园包来计算矩阵的滚动标准偏差(按列),有和没有并行化代码。但是,输出的形状出现了不同。

# load library
library('zoo')
library('parallel')
library('snow')

# Data
z <- matrix(runif(1000000,0,1),100,1000)

#This is what I want to calculate with timing
system.time(zz <- rollapply(z,10,sd,by.column=T, fill=NA))

# Trying to achieve the same output with parallel computing
cl<-makeSOCKcluster(4)
clusterEvalQ(cl, library(zoo))
system.time(yy <-parCapply(cl,z,function(x) rollapplyr(x,10,sd,fill=NA)))
stopCluster(cl)

我的第一个输出zz与输入z具有相同的尺寸,而输出yy是矢量而不是矩阵。我知道我可以做像矩阵(yy,nrow(z),ncol(z))之类的东西但是我想知道我是做错了什么还是有更好的编码方法来改进它。谢谢。

1 个答案:

答案 0 :(得分:1)

来自文档:

  

parRapply和parCapply总是返回一个向量。如果FUN总是返回   标量结果这将是行数或列数的长度:   否则它将是返回值的串联。

  

parRapply和parCapply是并行行和列应用函数   对于矩阵x;它们可能比parApply更有效但是   对结果进行较少的后处理。

所以,我建议你使用parApply