关于dplyr中~(波浪号)在mutate与across函数中的作用疑问
在tidyverse的across函数中,~(波浪号)的作用
在dplyr的across()函数里,~是tidyverse提供的匿名函数快捷写法,用来简化自定义处理逻辑的代码:
- 你写的
~na_if(., "999.99"),本质上等价于function(col) na_if(col, "999.99"),这里的.是tidyverse自动帮你绑定的变量,代表across()当前正在遍历处理的每一列(也就是你用where(is.character)筛选出来的字符列)。 - 当你去掉~之后,R会直接执行
na_if(., "999.99")这行代码,但此时.并没有被定义——只有在~开启的公式函数语境里,.才会被自动关联到当前处理的列。没有这个语境,R找不到.这个对象,自然就报出了object '.' not found的错误。
这种~的用法是tidyverse专属的语法糖,除了across(),在purrr系列函数(比如map())、dplyr的mutate()自定义计算场景里也很常见,核心就是帮你少写function(x)这种冗余的匿名函数声明,让代码更简洁。
内容的提问来源于stack exchange,提问作者Sunny Zhang
相关产品推荐
相关产品推荐

