![](/img/trans.png)
[英]Powershell - Store Multiple Results from Foreach loop into an Array
[英]store results from a nested foreach loop in a FBM class
我正在foreach循環中使用1.3e6x1.3e6的大型共享內存矩陣。 我使用bigstatsr軟件包的FBM函數創建該矩陣。 我需要FBM類對象中的循環結果不耗盡RAM內存。 這是我要在沒有FBM類對象的情況下要做的事情。
library(doParallel)
library(foreach)
library("doFuture")
cl=makeCluster(2)
registerDoParallel(cl
)
registerDoFuture()
plan(multicore)
results=foreach(a=1:4,.combine='cbind') %dopar% {
a=a-1
foreach(b=1:2,.combine='c') %dopar% {
return(10*a + b)
}
}
這就是我嘗試的方式
library(bigstatsr)
results=FBM(4,4,init=0)
saveinFBM=function(x,j){results[,j]=x}
foreach(a=1:4,.combine='savinFBM') %dopar% {
a=a-1
foreach(b=1:2,.combine='c') %dopar% {
return(10*a + b)
}
}
Error in get(as.character(FUN), mode = "function", envir = envir) :
object 'savinFBM' of mode 'function' was not found
PS:有人可以添加標簽“ dofuture”嗎?
如果我正確理解了您要做什么,則更快的替代方法是使用outer(1:2, 1:4, function(b, a) 10 * (a - 1) + b)
。
如果要使用此功能填充FBM
,可以執行以下操作:
library(bigstatsr)
X <- FBM(200, 400)
big_apply(X, a.FUN = function(X, ind) {
X[, ind] <- outer(rows_along(X), ind, function(b, a) 10 * (a - 1) + b)
NULL
})
通常情況下,使用並行當你寫在磁盤上的數據(你做什么,當你填會不由自主X[, ind]
但你真的想嘗試一下,你可以使用ncores = nb_cores()
作為附加參數big_apply()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.