iter <- 1000
myvec <- c()
while(is.null(myvec) || nrow(myvec) <= iter){
x = rnorm(10, mean = 0, sd = 1)
if(sum(x) > 2.5){
myvec <- rbind(myvec, x)
}
}
我想并行化上面的 while 循环,我不断迭代,直到总共有iter = 1000
条目在myvec
。我结帐了this https://stackoverflow.com/questions/43121109/parallel-while-loop-in-r在这里发布,但我认为那里的答案不适用于我的示例。
实际上你不需要并行化 while 循环。您可以将您的操作向量化x
像下面这样
iter <- 1000
myvec <- c()
while (is.null(myvec) || nrow(myvec) <= iter) {
x <- matrix(rnorm(iter * 10, mean = 0, sd = 1), ncol = 10)
myvec <- rbind(myvec, subset(x, rowSums(x) > 2.5))
}
myvec <- head(myvec, iter)
or
iter <- 1000
myvec <- list()
nl <- 0
while (nl < iter) {
x <- matrix(rnorm(iter * 10, mean = 0, sd = 1), ncol = 10)
v <- subset(x, rowSums(x) > 2.5)
nl <- nl + nrow(v)
myvec[[length(myvec) + 1]] <- v
}
myvec <- head(do.call(rbind, myvec), iter)
即使你有很大的数据,这也会快得多iter
, 我相信。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)