R语言模拟老龄化对薪资影响 自定义函数绘图报错求解
问题原因
你的代码存在5个核心错误,直接触发运行报错:
- 作用域混乱:滥用全局赋值符
<<-,但未在全局环境预先定义age/exp_y/sal等存储结构,函数运行时找不到对应对象,触发object 'sal' not found报错 - 函数传参缺失:定义的
aging函数要求传入df、t两个参数,但循环内调用时未传入任何参数,触发参数缺失报错 - 循环逻辑错误:
for (i in df)是遍历数据框的列而非逐行遍历个体,同时将绘图逻辑放在内层循环,每遍历一个字段就尝试绘图,完全不符合时序图的绘制逻辑 - 字段名拼写错误:原始数据的状态字段名为
statu,代码中错写为statut,运行时会触发字段不存在的问题 - 业务逻辑遗漏:原始数据中
statu == 'n_ac'的非就业个体薪资应为0,现有代码不区分就业状态直接套公式计算薪资,不符合规则
可行解决方案
不需要单独封装逻辑混乱的嵌套函数,直接预分配存储结构、按年迭代更新即可,代码可直接运行:
# 导入初始基准数据(替换为你自己的真实数据即可) df <- data.frame( age = c(26,20,4,24,36,42), sex = c('f','m','m','m','f','f'), edu = c('no','low','low','no','hiegh','low'), statu = c('ac','ac','n_ac','ac','ac','ac'), exp_y = c(2,15,0,10,18,17), sal = c(76,570,0,380,684,646) ) hor <- 30 # 设定30年模拟周期 avg_sal <- numeric(hor) # 预分配向量,存储每年的全样本平均薪资 current_df <- df # 初始化当期数据集为基准数据 # 逐年迭代模拟 for(t in 1:hor){ # 所有个体年龄+1 current_df$age <- current_df$age + 1 # 仅就业个体工作年限+1,非就业个体工作年限保持不变 current_df$exp_y[current_df$statu == 'ac'] <- current_df$exp_y[current_df$statu == 'ac'] + 1 # 计算当期薪资:就业个体按公式核算,非就业个体薪资为0 current_df$sal <- ifelse( current_df$statu == 'ac', 200 * current_df$exp_y * 0.19, 0 ) # 记录当期平均薪资 avg_sal[t] <- mean(current_df$sal) } # 绘制平均薪资时序变化曲线 plot( x = 1:hor, y = avg_sal, type = 'l', xlab = '模拟年份', ylab = '全样本平均薪资', col = 'steelblue', lwd = 2 ) grid()
如果后续需要加入就业状态动态转换(比如就业转失业、非就业转就业)、薪资涨幅调整等规则,只需要在每年的迭代块里新增对应字段的更新逻辑即可,整体框架不需要改动。
内容的提问来源于stack exchange,提问作者Majed
相关产品推荐
相关产品推荐

