我正在尝试运行一个并行返回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对象。我希望这提供了类似的背景。
由于
答案 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