假设我们有以下名为的数据集data2
。
id v1 v2
1 5 0.5
1 4 0.5
1 6 0.5
2 2 0.2
2 3 0.2
2 7 0.2
2 8 0.2
这是我的问题:length(data2$v1)
应随数据维度的变化而变化(由分隔id
)。例如,对于id = 1
,length(data2$v1) = 3
和length(data2$v1) = 4
时id = 2
。foreach()
就我而言,必须使用。我该怎么做?任何帮助深表感谢!
library(parallel)
library(foreach)
library(doSNOW)
foreach(i = 1:length(data2$v1)) %dopar% {
a <- matrix(nrow = length(data2[i]$v1), ncol=2)
for (j in 1:length(data2[i]$v1)) {
for (k in 1:2) {
a[j,k] <- j*k
}
}
return(a)
}
假设我们要foreach
分别对那些unique
“ id”行应用,一个选项是split
通过“ id”或用一个外部for
循环包装,遍历unique
“ id”,然后在循环中subset
输入该特定“ id”的数据(“ subdat”)。启动list
('out')来存储的结果,foreach
并分配matrix
内部嵌套for
循环的输出
library(doParallel)
un_id <- unique(data2$id)
out <- vector('list', length(un_id))
names(out) <- un_id
registerDoParallel(cl <- makeCluster(length(un_id)))
for(id1 in un_id) {
subdat <- subset(data2, id == id1)
out[[id1]] <- foreach(i = seq_len(nrow(subdat))) %dopar% {
a <- matrix(nrow = nrow(subdat), ncol=2)
for (j in seq(i)) {
for (k in 1:2) {
a[j,k] <- j*k
}
}
a
}
}
stopCluster(cl)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句