所以在一个简单化的世界中,让我们来看看这些数据:
set.seed(123)
require(doParallel)
cl<-makeCluster(2)
registerDoParallel(cl)
m <- 10
Result = foreach(i=1:m,.combine=cbind) %dopar% {
rows <- (1:10)
A <- rnorm(10, 5, 1)
A <- round(A, 0)
B <- rnorm(10, 6, 1)
B <- round(B, 0)
df <- data.frame(rows,A,B)
output_1 <- length(df$A[df$A == df$B])
# save the number of accounts where A == B
output_2 <- length(df$A[df$A != df$B])
# save the number of accounts where A and B are not equal
Result <- rbind(output_1,output_2)
}
使用此我们可以检查输出
Result[1,]
Result[2,]
但现在我想在结果的输出中包含与A!= B对应的行(一串行标识,而不是计数)
问题在于,这不是单个值,而且每次更改都会有所不同。怎么能实现这个目标呢?
更新
如果我们添加类似
的内容output_3 <- setdiff(df$rows, df$rows[df$A == df$B])
并调整
Result <- rbind(output_1,output_2, output_3)
我们运行的模拟比需要的更多
答案 0 :(得分:1)
这是你显然想要的:
set.seed(123)
require(doParallel)
cl<-makeCluster(2)
registerDoParallel(cl)
m <- 10
Result = foreach(i=seq_len(m)) %dopar% {
rows <- (1:10)
A <- rnorm(10, 5, 1)
A <- round(A, 0)
B <- rnorm(10, 6, 1)
B <- round(B, 0)
df <- data.frame(rows,A,B)
output_1 <- length(df$A[df$A == df$B])
# save the number of accounts where A == B
output_2 <- length(df$A[df$A != df$B])
# save the number of accounts where A and B are not equal
list(rbind(output_1, output_2), which(df$A != df$B))
}
stopCluster(cl)
返回列表列表。请注意,如果要将随机种子传递给工作者,则需要使用包doRNG。
这是我将使用的矢量化方法:
set.seed(42)
A <- matrix(round(rnorm(m * 10, 5, 1), 0), ncol = m)
B <- matrix(round(rnorm(m * 10, 6, 1), 0), ncol = m)
which(A != B, arr.ind = TRUE)
colSums(A != B)
colSums(A == B)