You need to enable JavaScript to run this app. dplyr中~波浪符与.x点符号的含义及代码运行逻辑咨询
优惠活动
大模型
产品
解决方案
定价
更多

dplyr中~波浪符与.x点符号的含义及代码运行逻辑咨询

代码逻辑解释

1. ~和.x的含义

~是tidyverse生态提供的匿名函数简写语法,最早由purrr包引入,现在dplyr的列操作函数都支持该写法,它的作用是快速定义一个不需要显式写function()的临时函数,等价于下面的完整写法:

function(.x) {
  length(unique(.x))
}

其中.x是固定占位符,指代across()遍历过程中当前被选中的那一列的向量值。

2. unique()的作用

unique()是R基础包自带的函数,作用是对输入的向量去除重复值,只保留互不相同的元素。所以length(unique(.x))的逻辑就是:先对当前列去重,再统计去重后的元素个数,也就是计算当前列一共有多少个不同的取值。

整段代码的完整运行流程

  1. 管道符|>将dplyr自带的starwars数据集传入后续的summarize()函数
  2. across()先执行第一个参数的筛选逻辑:where(is.character)会遍历starwars的所有列,筛选出所有数据类型为字符型的列,一共8列,和运行后得到的8列结果对应
  3. across()遍历每一个筛选出来的字符列,每拿到一列就把该列的向量赋值给.x,执行length(unique(.x))的计算
  4. summarize()将所有列的计算结果汇总为一行的tibble返回,每一列对应原来的一个字符列,值是该列的不同取值数量。

举个实际场景的例子:如果遍历到homeworld(角色家乡)列,unique(.x)会得到所有不重复的星球名称,length()统计后得到的结果就是星战角色来自多少个不同的星球。


内容的提问来源于stack exchange,提问作者student-R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 02:39:01