第 19 章 tidyverse中的dot

本章介绍tidyverse的语法中经常遇到., 不同的场景,含义不同。因此很有必要弄清楚各自的含义。

19.2 占位符

管道符号%>% 主要功能是传递参数。

  • y %>% f() is equivalent to f(y)

  • y %>% f(x, .) is equivalent to f(x, y)

  • z %>% f(x, y, arg = .) is equivalent to f(x, y, arg = z)

我们经常这样写

实际上,这里是有占位符的

19.3 Lambda函数

.出现在函数.f的位置上, 就是 purrr 风格的Lambda函数~ fun(.)

有时候程序员会将~toupper(.)简写成 toupper

19.4 正则表达式

## [1] "-e fa-es-ca-"
## [1] "the fattest ca-"

19.5 Unary funciton (只带一个参数的函数)

## [1] 2

等价于

## [1] 2

19.6 more placeholder

## [1]  1 10

19.7 当mutate遇到map

dplyr::mutate遇到purrr::map,情况就复杂很多了。然而,这种情况,tidyverse比比皆是。我就多说几句吧

这里mutate()行,有两个., 实际这两个.都是等待iris %>% head(3)传来的data.frame

  • 第一个 ., 是df
  • 第二个 ., 是df中的mean
  • mean传给 .x
  • sd传给 .y

再来一个变态的。(我们不一定要这样写,但我们尽可能的要明白它的意思。)

19.8 Dot dot dot

## [1] "a, b, c, d, e, f, g, h, i, j"

19.10 小结

  • tidyvere中
    • 占位符(时常经常和 %>% 一起)
    • Lambda函数
    • 一元函数(LHS)
  • 其他情形
    • 回归公式
    • 正则表达式
  • 注意
    • 有些函数参数以 . 前缀(不要混淆喔! )

19.11 回答问题

现在回答本章开始的问题

  • 第1行:路径中.代表当前位置,如果是..表示上一级目录
  • 第2行:正则表达式,代表任何字符
  • 第3行:占位符,等待数据框的传入,也可以简写select(-letter)
  • 第4行: lambda函数,~ as.factor(.)也可以简写as.factor~(.)要么都写,要么都不写
  • 第5行:同上,lambda函数
  • 第6行:第一个.代表lambda函数; 第二个.也是lambda函数,但这里它是all_vars(expr)中expr的一种特有写法,代表所有数值型变量,*行方向构成的向量, all_vars(. != 0)函数返回TRUE或FALSE,从而帮助filter()是否筛选该行
  • 第7行:占位符,代表上面传来的数据框
  • 第8行:回归模型lm中,第一个.代表除因变量earn之外所有的变量,第二个.占位符,留给上面的数据框
  • 第9行:第一个.是占位符,代表上面传来的list,第二个.lambda函数,依次对list的元素迭代处理,第二个.是参数名,.id是特有的一个符号。