如何将自定义table_prop函数应用到变量向量?能否用lapply替代循环?
用lapply替代for循环批量调用自定义函数
完全可以用lapply替代for循环来实现批量调用table_prop函数,代码会更简洁紧凑,不需要手动管理循环索引和结果存储。
方法1:修改函数以支持字符串输入
原函数使用了tidy eval的{{var}}语法,更适合直接传入变量名而非字符串。如果要适配字符串向量my_var,可以改用.data代词让函数支持字符串参数:
# 修改后的自定义函数 table_prop <- function(var, valeur){ res <- df %>% filter(haut == {{valeur}}) %>% as_survey_design(ids=1, weights=wght) %>% group_by(.data[[var]], sexe) %>% # 用.data[[var]]读取字符串对应的变量 summarise(p=survey_prop()) %>% select(-ends_with("_se")) %>% arrange(desc(p)) %>% spread(key="sexe", value="p") } # 用lapply批量调用 my_var <- c("nationalite", "cs") result_list <- lapply(my_var, function(x) table_prop(x, valeur=1)) # 给结果列表命名,方便索引 names(result_list) <- my_var # 查看结果 result_list$nationalite result_list$cs
方法2:不修改原函数,用符号转换适配
如果不想改动原函数,可以利用rlang::sym()将字符串转换为变量符号,再结合!!强制求值:
# 保持原函数不变 table_prop <- function(var, valeur){ res <- df %>% filter(haut=={{valeur}}) %>% as_survey_design(ids=1, weights=wght) %>% group_by({{var}}, sexe) %>% summarise(p=survey_prop()) %>% select(-ends_with("_se")) %>% arrange(desc(p)) %>% spread(key="sexe", value="p") } # 用lapply调用,转换字符串为符号 library(rlang) my_var <- c("nationalite", "cs") result_list <- lapply(my_var, function(x) table_prop(!!sym(x), valeur=1)) # 命名结果列表 names(result_list) <- my_var
两种方法都能实现批量处理,最终得到一个包含两个数据框的列表,分别对应nationalite和cs的计算结果。
内容的提问来源于stack exchange,提问作者Chloe_pa
相关产品推荐
相关产品推荐

