如何在R函数中动态指定变量名补全数据范围
解决方案
要实现你需要的自定义函数,关键是在complete()中正确使用tidy eval语法动态指定参数名,修正后的函数如下:
library(tidyverse) test <- function(data, variable, range) { data %>% complete({{variable}} := range, fill = list(n = 0)) }
调用验证
用你的示例数据调用函数:
z <- data.frame(gender = c('f','f','f','f'), g1 = c(2,3,4,5), n = c(3,2,8,3)) z %>% test(g1, 1:5)
输出结果与你期望的一致:
gender g1 n <chr> <dbl> <dbl> 1 f 1 0 2 f 2 3 3 f 3 2 4 f 4 8 5 f 5 3
修正说明
你之前的写法"{{variable}}" = range错误在于:字符串形式的"{{variable}}"不会被解析为传入的变量名,反而会被当作新列名处理。使用{{variable}} := range是tidyverse中动态命名参数的标准写法,{{}}用于引用函数的参数变量,:=则实现“动态参数名=值”的赋值逻辑,完美适配complete()的参数要求。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

