编写compute_deciles函数调用时遇W_h_hyp1对象未找到错误求助
问题解决:R函数中找不到变量的错误修复
错误原因
出现objet 'W_h_hyp1' introuvable(找不到对象W_h_hyp1)的核心原因有三个:
- 函数内部直接依赖全局环境的
wealth_data,未将数据集作为参数传入,导致作用域解析异常。 - 传入的列名参数
varh/varf未正确解析为数据框中的列,R会在函数环境中寻找名为W_h_hyp1的对象,而非wealth_data中的列。 - 函数没有返回值,即使计算成功也无法输出结果。
修正后的代码
# 加载必要包(确保已安装) library(survey) library(dplyr) compute_deciles <- function(data, varh, varf, weight_col) { # 计算第一组十分位数 deciles_h <- data %>% as_survey_design(ids = 1, weights = {{weight_col}}) %>% summarise(q = survey_quantile({{varh}}, quantile = seq(0.1, 0.9, 0.1), vartype = c("ci"), level = 0.95, na.rm = TRUE)) # 计算第二组十分位数 deciles_f <- data %>% as_survey_design(ids = 1, weights = {{weight_col}}) %>% summarise(q = survey_quantile({{varf}}, quantile = seq(0.1, 0.9, 0.1), vartype = c("ci"), level = 0.95, na.rm = TRUE)) # 返回包含两个结果的列表 list(deciles_h = deciles_h, deciles_f = deciles_f) } # 调用函数 result <- compute_deciles(data = wealth_data, varh = W_h_hyp1, varf = W_f_hyp1, weight_col = pond_trans) # 查看结果 print(result$deciles_h) print(result$deciles_f)
关键修正点
- 传入数据集参数:新增
data参数,将wealth_data传入函数,避免依赖全局环境,提升函数复用性。 - 解析列名参数:使用
{{}}(tidyeval注入操作符),让R正确识别传入的参数为数据框中的列名,而非独立对象。 - 返回计算结果:函数最后返回包含两个数据框的列表,调用后可通过列表索引访问结果。
- 简化代码:用
seq(0.1, 0.9, 0.1)生成十分位数向量,替代重复的数值输入。
额外检查项
- 确认
wealth_data数据框中确实存在W_h_hyp1、W_f_hyp1、pond_trans这三列。 - 确保已安装并加载
survey和dplyr包(若未安装,可运行install.packages(c("survey", "dplyr")))。
内容的提问来源于stack exchange,提问作者Chloe_pa
相关产品推荐
相关产品推荐

