Foreach R连接结果

时间:2015-01-29 21:12:01

标签: r

我正在尝试运行一个并行返回xts系列的函数。我需要将结果cbind添加到矩阵中,但我仍然坚持如何使其工作。

fun = function(name,x){
  mat = matrix(1:100)
  mat = mat + x
  colnames(mat) = name
  return(mat)
}

y = 1:26
name = LETTERS
mat = c()
foreach(j=1:length(y) ) %dopar% mat = cbind(mat,fun(name[j],y[j]))

以上是一个非常简单的例子。我想最终得到mat有26列名为A:Z,然后每行都是1:100加上当前的迭代索引。

关于我实际在做什么的垃圾。我正在运行100万个细菌,需要100万个不同的投入。每个输入都存储在类似的y中。回测的输出是信号1 or 0,它们是xts对象。我希望这提供了类似的背景。

由于

1 个答案:

答案 0 :(得分:1)

如果我理解了您的问题,我认为您可以在.combine=cbind来电中设置foreach,并将mat = cbind(mat,...)从您的表达主体中删除:

library(foreach)
library(doSNOW)
##
cl <- makeCluster(3,"SOCK")
registerDoSNOW(cl)
newMat <- foreach(j=1:length(y),
                  .combine=cbind) %dopar% {
                    fun(name[j],y[j])
                  }
##
stopCluster(cl)

为了节省空间,我将发布前10行和后10行:

R> newMat[1:10,1:26]
       A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
 [1,]  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
 [2,]  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
 [3,]  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
 [4,]  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
 [5,]  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
 [6,]  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
 [7,]  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
 [8,]  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
 [9,] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
[10,] 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
R> newMat[90:100,1:26]
        A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W
 [1,]  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
 [2,]  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
 [3,]  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
 [4,]  94  95  96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
 [5,]  95  96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
 [6,]  96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
 [7,]  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
 [8,]  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
 [9,]  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
[10,] 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
[11,] 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
        X   Y   Z
 [1,] 114 115 116
 [2,] 115 116 117
 [3,] 116 117 118
 [4,] 117 118 119
 [5,] 118 119 120
 [6,] 119 120 121
 [7,] 120 121 122
 [8,] 121 122 123
 [9,] 122 123 124
[10,] 123 124 125
[11,] 124 125 126

数据:

fun <- function(name,x){
  mat <- matrix(1:100)
  mat <- mat + x
  colnames(mat) = name
  return(mat)
}
##
y <- 1:26
name <- LETTERS
相关问题