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

vax_fun函数输出为零而非365维向量,请求排查异常原因

问题解决:vax_fun输出全零及结果收集问题

核心问题拆解

  1. 循环未累积结果:当前for循环里每次把vax_fun的计算结果直接覆盖x,最终x仅保留最后一次(timepoint=365)的取值——而365大于参数里的T3=235,触发else分支返回0,这是你看到输出全零的直接原因。
  2. 函数计算逻辑存在错误:
    • 第三个分支的v_t = exp(tetha)*timepoint不符合常规趋势(通常是平台期而非持续增长),明显是笔误,应该是固定值exp(tetha)而非乘以timepoint。
    • 第二、第四个分支的公式冗余,容易引发计算错误,可简化优化。

修正后的代码

第一步:修复函数逻辑

修正错误计算分支,简化线性增长/下降的公式:

vax_fun = function(timepoint, parms1){
  with(as.list(parms1), {
    if (timepoint < T0) {
      v_t = 0
    } else if (timepoint <= T1) {
      # 简化线性增长:从C0到exp(tetha)的区间线性插值
      v_t = C_0 + (timepoint - T0) * (exp(tetha) - C_0)/(T1 - T0)
    } else if (timepoint <= T2) {
      # 修正为平台期固定值,而非持续增长
      v_t = exp(tetha)
    } else if (timepoint <= T3) {
      # 简化线性下降:从exp(tetha)到C1的区间线性插值
      v_t = C_1 - (timepoint - T2) * (exp(tetha) - C_1)/(T3 - T2)
    } else {
      v_t = 0
    }
    return(v_t)
  })
}

第二步:正确收集循环结果

预先初始化向量存储每次计算值,避免覆盖:

parms1 = c(
  T0=55,
  T1=115,
  T2=175,
  T3=235,
  threshold = 275,
  tetha = 5,
  C_0 = 100,
  C_1 = 100
)

# 初始化长度为365的空向量
x = numeric(365)
for (i in 1:365) {
  x[i] = vax_fun(i, parms1)
}

# 查看最终结果
x

更高效的向量化写法(替代循环)

R中优先用向量化操作,代码更简洁效率更高:

x = sapply(1:365, vax_fun, parms1 = parms1)

结果验证

修正后x会是长度365的向量,符合预期逻辑:

  • 1-54:取值为0
  • 55-115:从100线性增长至exp(5)≈148.41
  • 116-175:保持≈148.41的平台期
  • 176-235:从≈148.41线性下降至100
  • 236-365:取值为0

内容的提问来源于stack exchange,提问作者F W

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:25:21