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

