R语言中rename_with函数里paste0前加波浪号的作用解析
关于rename_with中波浪号语法的运行机制解析
- 先明确
rename_with的核心要求:它的.fn参数需要接收一个函数,而非一段直接执行的代码。 - 直接写
rename_with(paste0(.x, ")"))报错的原因:
当你写paste0(.x, ")")时,R会立刻尝试执行这个表达式,但此时.x并不是你当前环境中存在的变量——.x是rename_with内部用来传递每一列列名的占位符,只有在rename_with调用传入的函数时才会被赋值。所以R找不到.x,自然抛出“找不到对象”的错误。 - 波浪号
~的作用:
在tidyverse系列函数里,~是创建公式风格匿名函数的快捷语法。~paste0(.x, ")")完全等价于写function(.x) paste0(.x, ")")。这个匿名函数会被rename_with接收,之后在处理每一列列名时,rename_with会把当前列名传给.x,再执行paste0拼接操作,这样就不会出现变量未定义的问题。 - 额外补充:
你也可以不用波浪号,直接写完整的匿名函数,比如rename_with(function(col) paste0(col, ")")),效果和波浪号写法完全一致,波浪号只是tidyverse提供的简化语法糖而已。
内容的提问来源于stack exchange,提问作者andrés
相关产品推荐
相关产品推荐

