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

SIR模型R代码报non-conformable arrays错误无法渲染易感感染色块

问题1:Error in infected & close_contact : non-conformable arrays 报错修复

  • 报错核心原因是两个参与按位与运算的矩阵维度不匹配:infected = x[-50, ] == 1 代码主动移除了矩阵第50行,得到的是 m-1行l列 的矩阵,而 close_contact 是 m行l列 的矩阵,维度不同无法执行按位运算。
  • 附加逻辑问题:初始化的x矩阵全为0,x==1的判断结果全为FALSE,没有正确设置初始感染人群;前面对close_contact赋值为"S"/"I"的代码会被后续的布尔值采样直接覆盖,属于冗余无效代码。

问题2:无法输出预期灰色、红色方块修复

  • 绘图逻辑存在多处未定义变量:plot_infection函数内直接使用了未传入的m、l、initial2变量,运行时无法读取对应值导致绘图失败。
  • 颜色映射逻辑错误:你定义的三色向量没有和S/I状态做对应绑定,生成的z矩阵只有0和1两个值,只会调用前两个颜色,永远无法触发红色配置。
  • 初始化函数无返回值:initial1没有写return语句,调用后返回空值,传入绘图函数的参数为空,自然无法渲染图形。

修正后可运行完整代码

# 初始化SIR状态矩阵:1=易感人群(灰),2=感染人群(红)
initial1 <- function(m, l){
  # 初始状态设置:90%易感,10%感染
  status <- sample(c(1, 2), size = m*l, prob = c(0.9, 0.1), replace = TRUE)
  status <- matrix(status, nrow = m, ncol = l)
  
  # 密接触达采样:30%概率发生有效密接
  close_contact <- sample(c(TRUE, FALSE), size = m*l, replace = TRUE, prob = c(0.3, 0.7))
  close_contact <- matrix(close_contact, nrow = m, ncol = l)
  
  # 传播逻辑:易感人群+发生密接+接触到感染者 转为感染状态
  new_infected <- (status == 1) & close_contact & (status == 2)
  status[new_infected] <- 2
  return(status)
}

# SIR状态绘图函数
plot_infection <- function(status_mat){
  # 颜色映射:0=背景白,1=易感灰,2=感染红
  sir_colors <- c("White", "Grey", "Red")
  par(mfrow = c(1,1))
  # 关闭坐标轴更符合方块网格展示效果
  image(status_mat, col = sir_colors, axes = FALSE)
}

# 测试运行
m <- 50
l <- 50
sir_status <- initial1(m, l)
plot_infection(sir_status)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:15:04