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

如何在R语言中将列名传入含summarize的自定义函数?

解决R函数中基于参数汇总数值的问题

你的问题出在:传入字符串列名后,summarize里的mean(search_term)没有正确引用数据框中的列,而是把字符串本身当成了计算对象,自然得不到正确结果。以下是几种可行的解决方法:

方法一:接受非字符串参数(推荐,符合dplyr使用习惯)

使用整洁评估的{{}}操作符,直接注入列名:

find_mean <- function(search_term){
  iris %>% 
    group_by(Species) %>% 
    summarize(mean = mean({{ search_term }}))
}

# 调用时直接传入列名,无需引号
find_mean(Petal.Length)

方法二:接受字符串参数

用.data代词引用数据框中的列,适合必须传字符串的场景:

find_mean <- function(search_term){
  iris %>% 
    group_by(Species) %>% 
    summarize(mean = mean(.data[[search_term]]))
}

# 调用时传入字符串列名
find_mean("Petal.Length")

方法三:旧版整洁评估写法(兼容低版本dplyr)

使用rlang::sym()将字符串转为符号,再用!!注入:

find_mean <- function(search_term){
  col_sym <- rlang::sym(search_term)
  iris %>% 
    group_by(Species) %>% 
    summarize(mean = mean(!!col_sym))
}

find_mean("Petal.Length")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:24:22