R 中的 foreach 循环为我的数组输出返回 NA 值

问题描述

我正在尝试在 R 中为我的一个项目应用 foreach 循环,因为 for 循环需要很长时间才能输出。问题是 foreach 循环不更新内存并返回 NA 值。我发现在使用 R 的 bigstatsr 包的 FBM 函数创建矩阵时可以排除这一点,但我有一个处理数组而不是二维矩阵的代码。这是代码

for (z in 1:100){
ft <- array(NA,c(x,y,length(beta),r) #x,beta are defined



foreach (jj = 1:y)%:%
  foreach (r in 1:length(beta) %dopar% {
    model.1 <- bvar() #a random statitical model function 
    
    ft[,jj,r] <- model.1$pred[,1,k] # model.1$pred is itself an array
    
  }
dimnames(ft)[[2]] <- cN

save(ft,file = paste0(foldername,"/",formatC(run,width=2,flag=0),".RData"))
}

现在的问题是 foreach 循环只为我的 ft 数组返回 NA 值,因为它不更新内存。有什么我可以做的事情吗?或者我可以通过将矩阵更改为数组来使用 FBM 函数的某种方式。

解决方法

我猜零件需要时间来拟合模型。

所以你总是可以返回 list(jj,r,ft[,jj,r])(甚至只是 ft[,r])并在以后填充数组。

all_res <- foreach (jj = 1:y) %:%
  foreach (r = 1:length(beta)) %dopar% {
    model.1 <- bvar() #a random statitical model function     
    model.1$pred[,1,k] # model.1$pred is itself an array    
  }

ft <- array(NA,c(x,y,length(beta),r) #x,beta are defined

for (jj in 1:y) 
  for (r in 1:length(beta))
    ft[,r] <- all_res[[jj]][[r]]