人对事物的认识大概可以分为三个层次,从“未知的未知”到“已知的未知”再到“已知的已知”。如果确实是这样的话,那学习就可以分为两种,一种是把“未知的未知”变为“已知的未知”,如了解到这个世界上存在一种叫做“负数”的东西,但不知道它究竟指什么;另一种是把“已知的未知”变为“已知的已知”,如通过进一步的了解,获知“负数”的确切意义。德尔菲的神谕认为没有人比苏格拉底更聪明,其看重的可能并不在于苏格拉底是否比其他所有人拥有更多“已知的已知”,而是看到他比其他人拥有更多“已知的未知”。我不知道两种学习中哪一种更为重要,但我觉得,在大多数情况下,前一种学习都是后一种学习的先决条件。人的时间是有限的,没法把所有的知识都掌握,所以比较好的学习思路可能是先去获取足够多的“已知的未知”,再决定把哪些“已知的未知”转变为“已知的已知”。

我接触R已经三年多了,但真正开始学习R,也就一年多的样子。我对R本身其实没有多大的兴趣,但当我把tidyverse变为“已知的未知”时,才对这门语言产生了热情。翻开哲学的入门书,很有可能会发现最开始的章节是以苏格拉底来划分的,如类似“前苏格拉底时代的哲学家们”的说法。在这里,我也想用tidyverse这个词来对我的笔记章节进行划分(当然,tidyverse对应的哲学家更有可能是笛卡尔),具体来说,包括tidyverse之前,用来介绍R的一些基本知识;tidyverse之内,用来介绍tidyverse核心包的使用方法;tidyverse之上,用来介绍建立在tidyverse核心包基础上的一些实用的包;tidyverse之外,用来介绍与tidyverse无关,但很有用的一些包。当然,这些内容中的很大一部分对我来说还是“已知的未知”。

想弄这么个东西,目的主要有两个:一方面,把自己会的东西以教程的形式写出来,能让自己把“已知的已知”掌握得更牢固;另一方面,也能督促自己不断地去学习新知识,探索“未知的未知”,转化“已知的未知”。因此,内容方面,就包括我目前会的,和我将来想学的,具体内容可以看后面暂定的大纲。另外,我也给自己设定了几个要求:

  • 术语尽量给出参考资料和对应的英文,不知道该如何翻译的直接用英文,符号给出对应的英文及其读音;

  • 尽量保证所有的内容都能跟上R本体和所涉及的包的更新;

暂定的提纲如下:

tidyverse之前

  • R的介绍及安装

  • R的基本概念及操作

  • R中的条件与循环

tidyveRse之内

  • 使用readr导入数据

  • 使用rvest获取网络数据

  • dbplyr与数据库

  • dplyr包常用操作及管道操作符

  • tidyr包常用操作及tidy data

  • stringr包常用操作及正则表达式

  • forcats常用操作

  • lubridate常用操作

  • purrr包探索

  • 组合使用

  • tidyverse代码风格

  • ggplot2基本统计图的绘制

  • ggplot2统计图的调整

  • ggplot2统计图的美化

tidyverse之上

  • 使用tidytext进行文本分析

  • 使用ggvis绘制交互统计图

  • 使用gganimate绘制动态统计图

tidyverse之外

  • 使用rmarkdown撰写报告

  • 使用blogdown搭建博客

  • 使用shiny制作网络应用

参考内容