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

R语言srvyr包下使用双大括号运算符自定义交叉表函数问题

你写的函数存在以下3个问题:

  • 缺少管道起始输入:函数内部第一行的mutate没有承接传入的survey_data参数,管道操作没有数据源起点,无法执行。
  • 函数调用括号缺失:as.factor和vars都是需要传入参数的函数,必须用括号把双大括号包裹的参数括起来,as.factor{{ vars1 }}、vars{{ vars2 }}属于语法错误,正确写法为as.factor({{ vars1 }})、vars({{ vars2 }})。
  • 语法过时(可选优化):mutate_at已经是dplyr弃用的旧语法,更推荐使用mutate(across(...))的写法兼容性更好。

修正后的可运行函数如下:

crosstab <- function(survey_data, vars1, vars2) {
  survey_data %>%
    mutate(demo = as.factor({{ vars1 }})) %>%
    mutate(across({{ vars2 }}, ~fct_explicit_na(.x, na_level = "to_impute"))) %>%
    group_by(demo, {{ vars2 }}) %>%
    summarize(
      proportion = srvyr::survey_mean(na.rm = TRUE),
      total = srvyr::survey_total(na.rm = TRUE)
    ) %>%
    select(-proportion_se, -total_se) %>%
    ungroup()
}

# 调用测试
crosstab(sv_sample, sex, device)

运行后返回的结果和你手动写交叉表的输出完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:27:02