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
相关产品推荐
相关产品推荐

