R语言使用dplyr编写列名转首字母大写函数报错如何解决
问题根因
你的代码存在两处问题:
:=运算符左侧的表达式默认不会自动执行求值,你编写的tools::toTitleCase(as_string(ensym(col_name)))没有被提前解析为字符串,而是作为未执行的调用表达式传递给rename,因此触发了「LHS必须是字符串或符号」的报错- 函数内部硬编码了数据集
quakes,没有使用传入的参数df,即使解决求值问题,函数也只会修改固定的quakes数据集,无法复用
修正方案
你只需要对左侧表达式添加!!(强制求值运算符),同时替换硬编码的数据集即可,完整代码如下:
library(dplyr) titlecase_col <- function(df, col_name) { df %>% rename(!!tools::toTitleCase(as_string(ensym(col_name))) := {{col_name}}) }
调用测试
titlecase_col(quakes, lat)
扩展说明
如果需要批量将数据框所有列名转为首字母大写格式,无需自定义函数,可以直接使用dplyr内置的rename_with函数实现,代码更简洁:
quakes %>% rename_with(tools::toTitleCase)
内容的提问来源于stack exchange,提问作者Clarinetist
相关产品推荐
相关产品推荐

