dplyr中~波浪符与.x点符号的含义及代码运行逻辑咨询
代码逻辑解释
1. ~和.x的含义
~是tidyverse生态提供的匿名函数简写语法,最早由purrr包引入,现在dplyr的列操作函数都支持该写法,它的作用是快速定义一个不需要显式写function()的临时函数,等价于下面的完整写法:
function(.x) { length(unique(.x)) }
其中.x是固定占位符,指代across()遍历过程中当前被选中的那一列的向量值。
2. unique()的作用
unique()是R基础包自带的函数,作用是对输入的向量去除重复值,只保留互不相同的元素。所以length(unique(.x))的逻辑就是:先对当前列去重,再统计去重后的元素个数,也就是计算当前列一共有多少个不同的取值。
整段代码的完整运行流程
- 管道符
|>将dplyr自带的starwars数据集传入后续的summarize()函数 across()先执行第一个参数的筛选逻辑:where(is.character)会遍历starwars的所有列,筛选出所有数据类型为字符型的列,一共8列,和运行后得到的8列结果对应across()遍历每一个筛选出来的字符列,每拿到一列就把该列的向量赋值给.x,执行length(unique(.x))的计算summarize()将所有列的计算结果汇总为一行的tibble返回,每一列对应原来的一个字符列,值是该列的不同取值数量。
举个实际场景的例子:如果遍历到homeworld(角色家乡)列,unique(.x)会得到所有不重复的星球名称,length()统计后得到的结果就是星战角色来自多少个不同的星球。
内容的提问来源于stack exchange,提问作者student-R
相关产品推荐
相关产品推荐

