当前课程知识点:R语言数据分析 > 中部:执具 > 第6章 基础编程——用别人的包和函数讲述自己的故事 > 6.3 站在巨人的肩膀上
大家好
欢迎来到《R语言数据分析》课程
今天我们和大家一块交流一个理念
就是R编代码应该站在巨人的肩膀上
伟大的牛顿先生曾经说过
如果说我看得比别人更远些的话
那是因为我站在巨人的肩膀上
好 那对于我们软件产业来讲
是不是也是这样
我们的交互设计之父 Alan Cooper
他怎么说的
伟大的科学学科
就像是站在其他巨人肩膀上的巨人
人们也说过 软件产业就像什么
站在其他侏儒脚上的侏儒
这个剧情反转得是有点快的
那对于我们R语言来讲
究竟是站在巨人肩膀上
还站在侏儒的脚上
听完了刚才Alan Cooper这位先生的话
下面这位先生都忍不住要笑了
他是谁
他是我们这个哈尔·范里安 Hal Varian
他是谷歌的
他这么说的
一旦开始做这个R的编代码
一个非常好的地方是什么
你发现你想要的包基本上都已经有了
那基本上就是属于站在巨人的肩膀之上
也就是说对于R来讲
其实还是应该站在巨人的肩膀上
那好
我们来看看究竟是前面这位交互设计之父说得对
还是我们这个范里安说得对
咱们看看还是回到我们的迷你小案例
我们的迷你小案例里面
除了这个用#号开头的这种注释性的语句之外
里面大量用到了什么
library()加载某个包
以及调用其中的相应的函数
所以我们在编R代码的时候
其实会用到大量的扩展包
以及扩展包里面的函数
那好
现在我将这个我们前面的这个代码
我将其中的扩展包的相应的语句
以及函数调用的相应语句我都圈出来
这时候我们可以考虑一下
假如我现在把这些带背景的
无论是红色背景还是黄色背景
这个无论是包的加载
还是其中包(中)的函数调用
这些语句我抠掉的话
那我们看看还剩下什么
这时候几乎就没有剩下什么
只有几个简单的数据对象的名字放在这
即便是我们自己编写的函数
大家看一下
其实它还里面还是调用了
好多其他的函数是不是
所以说
假如我们是用R语言来编代码的话
你会发现
基本上是应该站在别人的肩膀上
做这个事情 更进一步
而不是说从零开始一步一步来
所以对于R语言的这个编程人员而言
无论你是把自己定位为 数据科学家
还是数据分析工程师
你的定位应该什么
应该是帅才
而不是说所有事情都是从零开始
更多的应该是什么
应该是统率三军
你用别人的包
调用它相应的函数 你来指挥它 你来调度它
来完成你相应的任务
这是我们要做的事情
当然我们也非常理解
就有不少小伙伴 他是希望什么
控制欲极强
希望所有事情都是从零开始
所有事情都是我自己来的
但是其实对于我们真正要编写一个比较复杂的
面对一个复杂的科学问题和工程问题的时候
不可能说所有事情都从零开始
更多应该什么站在巨人肩膀上
调用已有的包和函数完成自己的事情
然后我简单总结了一下
我们R编代码应该是什么
应该是 用别人的包和函数讲述你自己的故事
我们几乎可以将这句话视为什么
R编代码的第一法则
或者说是黄金法则
这句话其实分成两部分讲
首先是用别人的包和函数
也就是说你得找得到别人包
找得到相应的函数
然后关键还是要讲你自己的故事
利用已有的什么
实现的功能
然后怎么样将你自己的任务完成
开展自己的研究 建立自己的模型
得到你自己最后的结论
也就说有一套自己的逻辑
讲述你自己的故事
假如这里面函数没有的话
可能你自己编写一个函数
更多的是什么
更多的利用别人包和函数
好 那这个R编代码
也就是说我们在后续内容里面也是分两部分来讲
今天我们先把前半部分先讲清楚
怎么来利用别人包和函数
重点是如何能找到这个包
能找到相应的函数
我们可以看一下
上这个R的官网的话
你会发现
目前的包有多少个呢
12583个包
当然
因为我这个课
咱们这个包还在不断更新
还在不断增加
假如你在看这个课的时候
看视频的时候
可能数量比这个还多
假如我现在想从这1万多个包里面
找到我自己想要的那个包
那就几乎是大海捞针是不是
所以我们如何来找这个包
尤其作为一个开源的这么一个生态的话
是非常关键的
我自己简单总结了一下
假如我想从这个1万多个包里面找到
想要的包的话
有这么一些方法
第一种
上百度 得幸福
当然我这绝对不是给某个搜索引擎做广告
不是这意思
其实你可以利用任意一个
你自己用的比较顺手的搜索引擎都可以
因为R这几年越来越火
要是你前几年的话
比如说那个零几年的时候
那个时候你想在一些搜索引擎里面
找到R相关的内容那非常难
因为R本身也不能作为关键字
就是说它是26个字母之一
你想搜索相应的
比如说针对某个问题情境
我来搜用什么包来实现它 很难
但这几年比较火
然后的话你通过一些搜索引擎
基本上将相应的问题敲进去的话
关键字敲进去
基本上都能找到
哪些包哪些代码如何实现它
这是应该相对比较便利的一个方法
然后第二个强烈推荐什么
逛论坛 找答案
这个论坛
前面其实已经提过
Stackoverflow
这个非常好
这个论坛几乎可以说
假如这个论坛关闭的话
很多程序员
不仅仅R的
包括其他的什么Python Java等等
很多程序员就不知道怎么写代码
因为我们有很多很多的问题
我们都需要在这个网站里面
找到我们自己想要答案
我们看这个论坛
这个论坛
假如我搜索的时候
最好 加一个 [r]
用方括号括起来 [r]
就表明什么
表明我所搜索的问题都是与R相关的
那目前来讲有多少与R相关的问题
大家数一下
有23万个问题
所以毫无疑问我们通常在
学R的时候
日常碰到的一些问题
几乎可以说绝大部分都在这里面
已经有人问过了
而且很大一部分都已经解决了
所以这一个论坛应该说
可能比你请教某一个人
或者某一个老师
可能他给你答案可能提供更多的信息
更容易找到答案
所以这个论坛是强烈建议大家
多关注一下的
有问题的时候来上来问
没问题的时候多逛一逛
这是这个论坛
第三种 sos
当然这个sos并不是我们求救信号
sos指的什么
sos是指一个扩展包
这个时候我可以先安装这个包
然后再加载它
先安装这个包
安装包的过程
我们可以通过
这个比如你用RStudio的话
它里面专门就有安装包的相应的一些功能按钮
当然也可以通过代码来写
比如说install.packages()
通过这个代码写也可以
安装完之后加载
然后利用其中的什么
利用其中的findFn()这个函数我们一看
毫无疑问题我在查找函数吧
针对某一个主题来查找函数
这个功能非常非常强大
就是因为它是相当于直接搜索到
我们整个这个有哪些包
它实现了相应的功能
哪些函数实现你想要的功能
基本都能找得到
我们看一下
假如我们现在搜索一个深度学习的
deep learning
将它作为关键词的话
看看R里面有哪些包和函数
与这个深度学习相关
我们目前比较火的这个深度学习
那好你会发现什么
它给你列出来
包是哪个包相应函数是哪个函数
然后包括他前面一些得分也有
一般来讲排在前面是值得我们推荐
所以这个包其实也是非常有利于我们来
找到我们相应的包以及相应的函数的
好 这是我们的第三种方法
我们再看第四种
第四种就是 强烈推荐这个
Task Views
按理说这应该是排在第一的
为什么
因为Task Views是属于什么
是属于R的官方的一个文档
官方对整个这个包相应的
一些函数进行一个系统的梳理
相对比较系统的梳理
它当然不能包含这1万多个包
那肯定不可能
但是对里面一些非常经典的
非常强大的包其实都已经按照主题进行梳理了
应该说它是最正统的
可以鸟瞰我们整个R的全景
尤其对于初学者来讲
比如说我们感兴趣的主题
比如说我们这个机器学习或者聚类等等
它其实都有相应的主题
在相应的主题里面都将我们典型的
包和函数进行了梳理
比如说我们以这个机器学习为例
它其实专门里面有什么
一个机器学习及统计学习
或者说统计机器学习
有这么一个主题
它下面就将什么
相应的一些包和函数都给你做了梳理
而且描述得非常简单明了
所以对于初学者来讲
这个非常宝贵的资源千万不要给浪费了
就是Task Views
当然我们在写具体代码的时候
因为它的实用性
比如说便捷性
可能不一定能和前面的那几种方法相比
不一定有前面那么实用
所以我们才把它摆在第四位
第五位的话基本就不用解释了
就专注于某个领域
要慢慢的积累
其实不管你用前面那种方法
它基本上都有遗漏的地方
当你专注某个领域积累一段时间之后
你知道这个领域相应的解决什么问题
用相应的包 可能积累得越来越多了
我们应该讲R上手非常容易
R的语法非常简单
但这就像下棋一样
规则很简单
但你想把它精通就很难
这个需要一个时间的积累
所以这是第五种
其实也属于一个不是方法的方法
这就是我们从这个大量的
我们开源的社区里面
如何找到我自己想要的包
这么几种典型的方法
我们来看一下
就针对我们这个机器学习 数据挖掘而言
目前有哪些比较典型的包
当然这个网站大家可以上来看一下
它其实也是对之前的很多包它的下载情况
它的问问题的情况都进行了一个统计
比如说有caret
这是一个分类回归的框架的包
这是强烈推荐的
再比如说随机森林
这个专用的randomForest
e1071
这里面有好多什么
机器学习相应的一些函数
比如支持向量机
朴素贝叶斯等等都有
比如rpart 这是分类回归树的
nnet是什么
是我们那个神经网络等等
就类似这些
大家可以参考一下
尤其是我们刚才讲的这个caret的这个包
其实是强烈推荐的
一旦我们找到某个包之后
安装完之后
其实我们可以通过什么
library()这个函数来加载它
比如说这个caret的这个包里面
我们可以看看它 目前支持多少分类回归模型
可以调用这个modelLookup()
这个函数来看
目前这个包里面支持的分类回归模型达到多少
237种
当然这里面是不同的算法
它有一些模型相对比较相近的
假如我们说归大类的话
这个分类回归模型可能十几种
或者是这么一个体量
但是假如说分类回归具体的算法模型的话
可能是200多种
也就是说数以百计
也就是我们在接触了机器学习数据挖掘之后
对这个分类回归的模型
我们应该心中有数了
它的体量可能数以百计的
咱们再看看
GitHub
我们前面也强调推荐了
一个是StackOverflow
还有一个是Github
我们都强调推荐两个网站
这里面其实也有什么
在Github里面它表现非常好的一些包里面也有统计
也可以供大家参考
比如说个xgboost等等
以及类似这种
用得非常多的
应用非常广泛的ggplot2
这个用来绘图的
可视化的
那包和函数找到之后我怎么使用它
当然这个语法非常简单是什么
就是由这个函数名后面加括符
交给它相应的参数也得到相应的结果
这就是函数调用的过程
那具体某个函数怎么使用
这里面就涉及一个帮助文档的问题
举个例子
比如说我们现在看到这么一行代码
xm一个小于号 一个减号
c然后后面一大堆的什么姓名
比如说周黎 汤海明 舒江辉 等等
那这个时候我们一看这个代码
毫无疑问它是一个函数调用的过程
一个函数名称是c() 然后后面是括符
是它的什么
是它相应的这个参数
然后赋值
这其实很形象的一个赋值的符号
将这个交给姓名xm这个变量
交给这个对象对吧
交给这个数据对象
那好我们这个c()这个函数究竟是怎么使用
那这时候我们就涉及一个帮助文档问题
帮助文档当然有很多调用方法
但最简单方法是什么
在前面加一个问号
把这个函数名放过来
接在后面
然后怎么在控制台里面回车
回车完之后你发现这个c
可不是我们abc的c
它是什么呢
大家一看Combine
怎么样将不同的数值把它组合在一起
变成一个向量或者是列表
所以这个时候其实我们一旦打开帮助文档之后
对这个函数如何使用这个函数的意义
其实我们就很清楚了
包括这个函数一个最基本的解释
比如说这个函数那个调用的过程
它参数怎么设置
以及一些具体的一些细节
细节的说明说得很清楚
包括它的返回值等等
在我们这个帮助文档里面说得非常清楚
以及我们这个函数的一些示例
一些示例
其实我们都可以照葫芦画瓢
很多时候我们接触到一个新的包
以及里面一些函数的时候
我们可能刚开始不知道怎么用
那我们经常就把这个代码怎么拷过来
先改一改
照葫芦画瓢
这样可能更加有利于我们什么
掌握这里面的相应的包和函数的使用
好 以上就是我们关于这个如何找到这个包
以及找到包之后
里面的函数如何使用
一个最简单的方法就是查帮助文档
利用好这个帮助文档
好前面就将我们这个
R语言数据分析
R语言编代码
一个最基本的理念进行简要的讲解
当然我们只是讲了前半句话
我们说R编代码就是用别人包和函数
讲述自己的故事
那如何讲述自己的故事
如何写自己的一套逻辑
我们在接下课程里面再详细展开讲
本次课到此结束
谢谢大家
-第1章 气象万千、数以等观
--第1章 作业
-第2章 所谓学习、归类而已
--第2章 作业
-第3章 格言联璧话学习
--第3章 作业
-第4章 源于数学、归于工程
--第4章 作业
-讨论题
-第5章 工欲善其事、必先利其器
--第5章 作业
-第6章 基础编程——用别人的包和函数讲述自己的故事
--6.1 编程环境
--6.4 控制流
--第6章 作业
-第7章 数据对象——面向数据对象学习R语言
--第7章 作业
-第8章 人人都爱tidyverse
--第8章 作业
-第9章 最美不过数据框
--第9章 作业
-第10章 观数以形
--第10章 作业
-第11章 相随相伴、谓之关联
--11.1 导引
--第11章 作业
-第12章 既是世间法、自当有分别
--12.1 导引
--第12章 作业
-第13章 方以类聚、物以群分
--13.1 导引
--第13章 作业
-第14章 庐山烟雨浙江潮
--第14章 作业