tidyverse学习与总结
引言
tidyverse 对于R语言的数据科学应用,其重要性不用多言。R语言程序包数量居多,但是这个tidyverse 套装中的程序包值得我去认真学习和总结,以期获得一个鸟瞰视野。
首先,查看其包含的所有包,目前一共26个(截止2020-4-7):
library(tidyverse)
# List all packages in the tidyverse
tidyverse_packages(include_self = TRUE)
[1] "broom" "cli" "crayon" "dplyr" "dbplyr" "forcats"
[7] "ggplot2" "haven" "hms" "httr" "jsonlite" "lubridate"
[13] "magrittr" "modelr" "purrr" "readr" "readxl
(>=" "reprex"
[19] "rlang" "rstudioapi" "rvest" "stringr" "tibble" "tidyr"
[25] "xml2" "tidyverse"
# 注意readxl
(>= 是显示问题,其实就是readxl package
然后按照个人兴趣,逐个学习其中的每个包的主要函数与用法,与语法逻辑。
对于对一个子package,我强烈推荐通过browseVignettes(package = "pkg_name")
,pkg_name是子package 的包名称,来进行鸟瞰式地学习和掌握该package。
broom
browseVignettes(package = "broom")
Vignettes in package broom
- Adding tidiers to broom - HTML source R code
- Available methods - HTML source R code
- broom and dplyr - HTML source R code
- Glossary of ouput columns and tidier arguments - HTML source R code
- Introduction to broom - HTML source R code
- kmeans with dplyr and broom - HTML source R code
- Tidy bootstrapping - HTML source R code
cli
crayon
dplyr
browseVignettes(package = "dplyr")
打开一个html页面,
Vignettes in package dplyr
- dplyr compatibility - HTML source R code
- Introduction to dplyr - HTML source R code
- Programming with dplyr - HTML source R code
- Two-table verbs - HTML source R code
- Window functions - HTML source R code
看到包含5个vignette,每个都包含了html, source,和R code。这三个文件的逻辑是,source为R markdown的代码,html 是source rmarkdown文档导出的html文件,R code 就是只包含html 中的R代码部分(Just the code)。所以为了学习目的,应该看html,既有详细的介绍,又有代码示例。
- 首先学习,Introduction to dplyr的html。是dplyr 语法基础和函数基础的介绍,是必须掌握的内容。
- 再学习了,Two-table verbs。介绍了Mutating joins, Filtering joins, Set operations,是在dplyr中处理两个数据框之间根据观测值、根据变量名、将数据行视为一个集合的三种类似于merge用法的函数。
- 然后再学习Window functions。窗口函数就是聚合函数的变体,窗口函数产生和变量个数一样数目的结果,聚合函数如mean()将n个变量产生出一个结果。
- 再学习了Programming with dplyr 是一个dplyr函数中,引用的列名中包含变量时的处理方法。
- dplyr compatibility,主要是介绍不同的dplyr包版本之间的兼容性,目前一般的使用中一般用到的都是版本之间一直保持的经典函数用法,所以这个文档可以先不做学习。
dbplyr
forcats
ggplot2
haven
hms
httr
jsonlite
lubridate
magrittr
modelr
browseVignettes(package = "modelr")
提示没有vignette。
help("modelr")
modelr: Modelling Functions that Work with the Pipe。modelr,帮助将建模过程无缝集成数据处理和可视化的管道中。
purrr
其他语言的函数式编程
browseVignettes(package = "purrr")
Vignettes in package purrr
本package的html内容介绍比较简略,如下:
purrr从许多相关的工具中获得灵感:
- List operations defined in the Haskell prelude
- Scala’s list methods.
- Functional programming libraries for javascript: underscore.js, lodash and lazy.js.
- rlist, another R package to support working with lists. Similar goals but somewhat different philosophy.
然而,purrr的目标并不是试图在R中模拟一种更纯粹的函数式编程语言;我们不想在R中实现Haskell的第二级R版本。我们的目标是给你类似于FP语言的表达能力,同时允许你写代码看起来和工作起来都像R:
- 我们使用管道
%>%
, 来编写可以从左向右读取的代码,而不是使用 point free(默示)样式。. - 我们用
…
来传递额外的参数。 - 匿名函数在R中是冗长的,因此我们提供了两个简便方法。对于一元函数,
~ .x + 1
is equivalent tofunction(.x) .x + 1
。对于函数链,. %>% f() %>% g()
is equivalent tofunction(.) . %>% f() %>% g()
(此快捷方式由magrittr提供)。 - R是弱类型的,所以我们需要' map '变量来描述输出类型(如
map_int()
,map_dbl()
, 等),因为我们不知道'.f
的返回类型。 - R函数支持name arguments,而不是为一些细微的变化提供不同的函数。' detect() '和' detectLast() ')我们使用一个命名参数' .right '。类型稳定的函数很容易推理,因此附加的参数永远不会改变输出的类型。R has named arguments, so instead of providing different functions for minor variations (e.g.
detect()
anddetectLast()
) we use a named argument,.right
. Type-stable functions are easy to reason about so additional arguments will never change the type of the output.
readr
Vignettes in package readr
readxl
reprex
rlang
rstudioapi
rvest
stringr
browseVignettes(package = "stringr")
Vignettes in package stringr
首先,学习Introduction to stringr
在 stringr主要有四个家族的函数:
- 字符操作函数
- 空格操作工具
- 区域敏感操作,其操作因区域而异。
- 模式匹配功能。它们识别模式描述的四个引擎。最常见的是正则表达式,但还有其他三种工具。