You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中for循环遇NA结果时如何重跑当前迭代?

问题修正方案

核心问题是:for循环的迭代序列是预先确定的,直接修改迭代变量c无法实现重跑当前迭代的需求。以下是具体修正方案:

关键修改思路

把单次迭代的所有逻辑封装进repeat循环内,当得到的final_boot1不含NA时,退出repeat循环并保存结果;若结果出现NA,则自动重新执行当前迭代的全部步骤(重新生成扰动项、重新执行凸优化),直到得到有效结果为止。

修正后的完整代码

library(CVXR) # 移除多余的点号

B=50 # Bootstrap迭代次数
beta_bootstrap = matrix(NA,B,p) # 存储B次Bootstrap估计结果

for(c in 1:B) {
  repeat { # 新增repeat循环,实现当前迭代重跑逻辑
    # 重新生成Exp(1)扰动项
    G_boot = matrix(NA,1,n)
    for (j in 1:n) {
      G_boot[1,j]= rexp(1,1)
    }
    
    # 定义CVXR优化变量与目标函数
    v3 = CVXR::Variable(p) 
    penalty_boot = (p_norm(v3,1))*lambda_opt # L1惩罚项
    zz= t(y*G_boot) 
    l1= -sum((z%*%v3)*zz) 
    zz1= as.matrix(y-P_tilde) 
    l2= sum((z%*%v3)*zz1) 
    zz2= t(G_boot) 
    l3 = sum((logistic(z%*%v3))*zz2) 
    obj_boot = penalty_boot+l1+l2+l3   
    prob_boot = Problem(Minimize(obj_boot)) 
    
    # 求解凸优化问题
    resultB = solve(prob_boot)
    final_boot1 = as.vector(resultB$getValue(v3))
    
    # 检查结果有效性,有效则退出repeat循环
    if(!any(is.na(final_boot1))) {
      break
    }
    # 结果无效时自动重新执行repeat内的全部代码
  }
  
  # 将有效结果存入矩阵
  beta_bootstrap[c,] = final_boot1
}

beta_bootstrap # 用于构建Bootstrap百分位数区间

关键修改说明

  • 新增repeat循环包裹单次迭代逻辑,确保结果NA时自动重跑当前迭代,直到获得有效结果。
  • 移除原代码中无效的c=c-1和next操作——for循环的迭代变量是只读的,手动修改不会改变循环的推进顺序。
  • 简化结果存储步骤:final_boot1已是向量,可直接赋值给矩阵行,无需多余转置操作。

内容的提问来源于stack exchange,提问作者Mayukh Choudhury

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 12:22:04