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

如何将自定义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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 14:32:22