在dplyr条件选择中,波浪号(~)的作用是什么?

4
假设我有一个原始数据集如下。作为整理过程,我尝试选择没有NA值的列 - 或删除带有NA的列 - 参考this 原始数据
 #>   data_name col_a  col_b
 #>   <chr>      <int> <int>
 #> 1 data_a     30    NA
 #> 2 data_b     20    75
 #> 3 sum        50    NA

删除缺失值列的代码

data_without_na <- raw_data %>% select_if(~ !any(is.na(.)))
data_without_na

输出

#>   data_name col_a
#>   <chr>      <int>
#> 1 data_a     30    
#> 2 data_b     20    
#> 3 sum        50  

输出结果符合我的预期,但我不明白为什么需要在条件语句的开头加上波浪号(~)。

目前我理解的如下:

  • R中的波浪号:将等式左边与右边分开
  • !:否定
  • any(is.na(.)):对于每一列,如果存在NA值,则返回真或假值

没有左侧变量时,波浪号如何起作用?


这个已经从DS迁移到这里。 - undefined
1个回答

2
中,使用~等价于function(...)。基本上,~将类似公式的表达式转换为函数。请参见下文:
library(dplyr)

df %>% 
  select_if(function(x) !any(is.na(x)))
#>   data_name col_a
#> 1    data_a    30
#> 2    data_b    20
#> 3       sum    50

df %>% 
  select_if(~ !any(is.na(.)))
#>   data_name col_a
#> 1    data_a    30
#> 2    data_b    20
#> 3       sum    50

我可以尝试进一步解释,但是在StackOverflow上有多个讨论串更好地解释了这一点,所以我只是会引用它们:
  1. R中的波点(~.)
  2. dplyr中波浪线和点符号表示的含义

数据:

df <- read.table(text = " data_name col_a  col_b
 data_a     30    NA
 data_b     20    75
 sum        50    NA", header = T)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接