簡體   English   中英

將來自嵌套的foreach循環的結果存儲在FBM類中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM