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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:45:32