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
相关产品推荐
相关产品推荐

