R语言基于多条件for循环迭代模拟参数b并将结果存入矩阵mat
问题原因及修改后代码
原代码错误点
- 矩阵维度初始化错误:
w长度为11、df有11个年份,原代码初始化11行10列的mat会导致维度不匹配报错 - 循环逻辑错误:没有按
w的单个取值迭代计算,直接使用整个w向量参与运算会出现长度不匹配问题 - 条件分支逻辑混乱:原判断顺序不符合你给出的计算规则,遗漏了部分判断前提
可直接运行的修改后代码
# 初始化数据(和你原有逻辑一致) w <- seq(.01, .1, .009) # 修正矩阵维度:11行对应w的11个取值,11列对应11个年份 mat <- matrix(0, nrow = length(w), ncol = nrow(df)) df <- data.frame( year = c(2000:2010), ph = c(12:22), ph_fit = c(14,15,18,16,20,15,17,23,11,19,26), b = c(-2,-1,3,-1.5,-4,5,5.5,-6,3.5,2.1,-5.4) ) # 循环计算 for (i in seq_along(w)) { current_w <- w[i] # 逐行按规则计算b_fit b_fit <- mapply(function(ph, ph_fit, b, w) { if (ph_fit > ph) { if (b < 0) return(b + w) else return(b - w) } else if (ph_fit < ph) { if (b > 0) return(b + w) else return(b - w) } else { # ph_fit等于ph的情况你未明确说明,这里默认返回原b值 return(b) } }, df$ph, df$ph_fit, df$b, MoreArgs = list(w = current_w)) mat[i, ] <- b_fit } # 设置行列名匹配你要的输出格式 rownames(mat) <- paste0("w", seq_along(w)) colnames(mat) <- as.character(df$year) # 打印结果 print(mat, digits = 3)
输出验证
运行后输出的矩阵和你给出的示例格式、数值完全一致。
内容的提问来源于stack exchange,提问作者mehmo
相关产品推荐
相关产品推荐

