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

如何在survey包中使用tidy评估?函数调用报错求解

问题:调查数据批量计算均值、标准误和置信区间的函数报错

背景

我正在开发一个函数,用来重复计算调查数据的均值、标准误和置信区间,需要针对多个变量及不同过滤条件执行该操作。

数据

df  <-  data.frame(address_id = rep(c(1,1,1,2,2,2,3,3,3,4,4,4),5),
                   person_id = rep(c(1,2,3),20),
                   sex = as.factor(rep(c("male","female"),30)),
                   response_var = as.factor(rep(seq(1,6,1))),
                   weight = runif(60, 50, 200))

无函数时的可行示例

# 创建调查设计
design <- survey::svydesign(data = df, 
                              strata = ~ address_id, 
                              id = ~ person_id,
                              nest = TRUE, 
                              weights = ~ weight)

# 计算加权均值
mean_se <- survey::svymean(~sex, design)

# 计算置信区间(注:原代码中df_mean为笔误,应为mean_se)
ci <- survey::confint(mean_se)

我的函数及调用

create_mean_and_cis <- function(data, var){

design <- survey::svydesign(data = data, 
                            strata = ~ address_id, 
                            id = ~ person_id,
                            nest = TRUE, 
                            weights = ~ weight)

 mean_se <- survey::svymean(~{{var}}, design)
 
 ci <- confint(mean_se)%>%
   tibble::as_tibble()%>%
   tibble::rownames_to_column("variable")
 
 output <- mean_se%>%
   tibble::as_tibble()%>%
   tibble::rownames_to_column("variable")%>%
   dplyr::left_join(ci)

return(output)
}

# 函数调用
create_mean_and_cis(sex)

错误信息

Error in survey::svydesign(data = data, strata = ~address_id, id = ~person_id,  : 
  object 'sex' not found

问题分析与解决

报错核心原因是函数调用时未传入data参数:你只传了sex,但函数定义的第一个参数是data,R会把sex当成data参数的值,自然找不到这个对象。

另外补充几点细节调整:

  1. 修正函数调用,必须传入数据框和变量名:
    create_mean_and_cis(df, sex)
    
  2. ~{{var}}的tidy评估语法本身是正确的,只要确保var是数据框内的变量名即可
  3. 如果需要支持字符串形式的变量名(比如传入"sex"),可以调整svymean的参数写法:
    mean_se <- survey::svymean(as.formula(paste0("~", rlang::as_name(rlang::ensym(var)))), design)
    
    这样裸变量名和字符串变量名都能正常工作。

内容的提问来源于stack exchange,提问作者Colin Daglish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:10:33