如何在Expss的tab_cells中同时使用多响应集与任意数量变量?
解决方法
问题出在你把包含函数调用的字符串拆成了单纯的变量名列表,mdset(...)是函数调用表达式而非普通变量名,eval(..[(varname)])无法正确解析这类表达式。可以按以下步骤修改代码:
将字符串解析为R表达式列表
不要拆分字符串,直接把包含变量和多响应集的字符串解析成R能识别的表达式:library(rlang) connectionsvars <- "connected_scc, mdset(`4.2_1` %to% `4.2_13`), mdset(`4.3_1` %to% `4.3_12`)" connectionsvar_exprs <- parse_exprs(connectionsvars)修改函数,使用大爆炸运算符展开表达式
在tab_cells中用!!!(大爆炸运算符)直接展开所有表达式,同时支持普通变量和多响应集调用:bannertable <- function(var_exprs, varnametitle) { xtab <- survey_data1 %>% tab_cols(total(), age_range) %>% tab_cells(!!!var_exprs) %>% tab_stat_cpct(total_row_position = "below", total_statistic = "w_cpct", total_label = "#Total %") %>% tab_pivot() assign(paste0(varnametitle, "Wtable"), xtab, envir = .GlobalEnv) } # 调用函数 bannertable(var_exprs = connectionsvar_exprs, "connections")
原理说明
parse_exprs会把字符串内容转换成R可执行的表达式(比如将mdset(4.2_1%to%4.2_13)转换为真正的函数调用逻辑),!!!运算符则会把表达式列表中的每个元素逐个传入tab_cells,以此实现普通变量与多响应集的同时兼容。
内容的提问来源于stack exchange,提问作者Megan Brown
相关产品推荐
相关产品推荐

