【问题标题】:foreach loop in R returns NA values for my array outputR中的foreach循环为我的数组输出返回NA值
【发布时间】:2021-09-23 20:19:52
【问题描述】:

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

for (z in 1:100){
ft <- array(NA,c(x,y,length(beta),r) #x, y, 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 函数的某种方式。

【问题讨论】:

    标签: r arrays foreach


    【解决方案1】:

    我猜这部分花时间是拟合模型。

    因此,您始终可以返回 list(jj, r, ft[,jj,,r])(甚至只是 ft[,jj,,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, y, beta are defined
    
    for (jj in 1:y) 
      for (r in 1:length(beta))
        ft[,jj,,r] <- all_res[[jj]][[r]]
    

    【讨论】:

    • 是的。我需要在不同的变量集上运行相同的模型,然后将它们堆叠在一个数组中,因为它是多维的。但我无法完全理解你的意思。你能编辑我的代码并告诉我在哪里做什么(我无法得到“稍后填充数组”的东西)
    • 我的意思是将所有结果作为结果列表返回。然后将这些结果分配到一个带有正常 for 循环的数组中。
    • 这是否意味着将我的第六行编辑为model.1$pred[,1,k]&lt;-list(jj, r, ft[,jj,,r]) 我这样做了,并且还输入了 .combine = 'c' 的参数。我的输出仍然返回 NA。
    猜你喜欢
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 2020-05-24
    • 2014-12-19
    • 2018-10-08
    • 1970-01-01
    相关资源
    最近更新 更多