R语言dplyr中如何将函数输入参数作为新列名
自定义函数内动态拼接列名的实现调整
原代码的报错原因
- 命名不统一:函数定义名为
new_col,调用时写为newcol,会触发对象不存在的错误 - 语法残缺:
mutate()函数缺少闭合右括号 - 核心语法不匹配:
dplyr::mutate()中的普通赋值符=不支持将动态生成的字符串/表达式直接作为新列名,需要使用动态赋值语法完成列名拼接
可直接运行的正确代码
根据使用的dplyr版本,可以选择两种稳定实现方式:
兼容全版本dplyr的写法
通过!!解引用动态生成的列名表达式,搭配:=替代普通赋值符:
library(dplyr) new_col = function(dat_, period_) { dat_ %>% mutate( !!paste0("mpg", period_) := mpg + period_ ) } # 调用方式 mtcars %>% new_col(20)
dplyr 1.1.0+ 推荐的简写写法
直接在列名字符串中嵌入变量占位符,无需手动写字符串拼接、手动解引用:
new_col = function(dat_, period_) { dat_ %>% mutate( "mpg{period_}" := mpg + period_ ) } # 调用效果与上述写法完全一致 mtcars %>% new_col(20)
实际运行效果
传入period_=20调用函数后,输入数据框会新增一列名为mpg20的字段,字段内每一行的取值等于原数据mpg列数值与传入参数20的和,和预期需求完全匹配。
内容的提问来源于stack exchange,提问作者spazznolo
相关产品推荐
相关产品推荐

