张敬信:我的R语言新书信息汇总​zhuanlan.zhihu.com

0.3 R 语言编程思想

0.3.1 面向对象

R 是一种基于对象的编程语言,即在定义类的基础上,创建与操作对象;数值向量、函数、图形等都是对象。Python的一切皆为对象也适用于 R。

a 

b 

f 

早期和底层 R 语言中的面向对象编程是通过泛型函数来实现的,以 S3 类、S4 类为代表。新出现的 R6 类更适合用来实现通常所说的面向对象编程(OOP),包含类、属性、方法、继承、多态等概念。

面向对象的内容是 R 语言编程的高级内容,有上述基本了解即可,本书不做具体展开,只在附录放一个用 R6类面向对象编程的简单示例,有兴趣的读者可参阅 [@hadley2019]。

0.3.2 面向函数

笼统来说,R 语言就两个事情:数据,对数据应用操作。这个操作就是函数,包括 R 自带的函数,各种扩展包里的函数,自定义的函数。

所以,使用 R 大部分时间都是在与函数打交道,学会了使用函数,R 语言也就学会了一半,**啊?R 这么简单??确实差不多[脚注2],很多人说 R 简单易学,也是因为此。

脚注2: 前提是不把 R 当一门编程语言,只想简单套用现成的算法模型。

编程中的函数,是用来实现某个功能,其一般形式为:

(

你只要把输入给它,它就能在内部进行相应处理,把你想要的返回值给你。

这些输入和返回值,在函数定义时,都要有固定的类型(模具)限制,叫做形参(形式上的参数);在函数调用时,必须给它对应类型的具体数值,才能真正的去做处理,这叫做实参(实际的参数)。

所以,定义函数就好比创造一个模具,调用函数就好比用模具批量生成产品。

使用函数最大的好处,就是将实现某个功能,封装成模具,从而可以反复使用。这就避免了写大量重复的代码,程序的可读性也大大加强。

下面看一个调用函数的例子。比如想做线性回归,通过网络搜索知道是用自带 `lm()` 函数实现。那么先打开该函数的帮助:

?

执行 `?函数名`,若函数来自扩展包需要事先加载包,则在 Rstudio 右下角窗口打开函数帮助界面,一般至少包括如下内容:

  • 函数描述
  • 函数语法格式
  • 函数参数说明
  • 函数返回值
  • 函数示例

通过阅读函数描述、参数说明、返回值,再调试示例,就能快速掌握该函数的使用。

函数包含很多参数,常用参数往往只是前几个。比如 `lm()` 的常用参数是:

  • formula: 设置线性回归公式形式:因变量 ~ 自变量 + 自变量
  • data: 提供数据(框)

使用自带的 `mtcars` 数据集演示,按照函数参数要求的对象类型提供实参:

head

model 

所有的 R 函数,即使是陌生的,都可以这样来使用。

0.3.3 向量化编程

高级编程语言都提倡向量化编程[脚注3],说白了就是,对一列/矩阵/多维数组的数同时做同样的操作,既提升程序效率又大大简洁代码。

脚注3: 向量化编程中的向量,泛指向量/矩阵/多维数组。

向量化编程,关键是要用整体考量的思维来思考、来表示运算,这需要用到《线性代数》的知识,其实我觉得《线性代数》最有用的知识就是向量/矩阵化表示运算。

比如考虑

元一次线性方程组:

若从整体的角度来考量,引入矩阵和向量:

则前面的

元一次线性方程组,可以向量化表示为:

可见,向量化表示大大简化了表达式。这放在编程中,就相当于本来用两层 `for` 循环才能表示的代码,简化为了短短一行代码。

向量化编程其实并不难,关键是要转变思维惯式:很多人学完 C 语言后的后遗症,就是首先想到的总是逐元素的 `for` 循环。摆脱这种想法,调动头脑里的《线性代数》知识,尝试用向量/矩阵表示,长此以往,向量化编程思维就有了。

下面以计算决策树算法中的样本经验熵为例来演示向量化编程。

对于数据集 D,

表示第
类样本所占的比例,则 D 的样本经验熵为

其中,

表示集合包含的元素个数。

实际中经常遇到要把数学式子变成代码,与前文自己写代码所谈到的一样,首先你要看懂式子,拿简单实例逐代码片段调试就能解决。

这里 D 是数据集,比如西瓜分类数据:

df 

因变量好瓜表示是否为好瓜,取值为 “是” 和 “否”,则 D 分为两类:

为好瓜类,
为坏瓜类。因为只需要对各类做计数,只关心这一列数据就够了。

从内到外先要计算

, 用向量化的思维同时计算,就是统计各分类的样本数,再除以总样本数:
Y 

p 

继续代入公式计算,记住 R 自带函数天然就接受向量做输入参数

log2

p 

- 

看着挺复杂的公式用向量化编程,核心代码只有两行:计算 p 和最后一行。这个实例虽然简单,但基本涉及到所有常用的向量化操作:

  • 向量与标量做运算
  • 向量与向量做四则运算
  • 函数作用到向量

参考文献:

【@hadley2019】Hadley Wickham, Advanced R. Advanced R

————————————

版权声明:原创作品,版权所有,禁止用于一切出版。

r语言 悲观剪枝_【R语言新书】前言Ⅲ—R语言编程思想相关推荐

  1. r语言 悲观剪枝_《R语言编程—基于tidyverse》新书信息汇总

    我之前预告过的 R 语言新书,起名为<R语言编程-基于tidyverse>,本书的目的是为了在国内推广 R 语言和 R 语言最新技术,电子版将始终跟踪最新并免费分享.本书非常适合新手 R ...

  2. 《Go语言精进之路,从新手到高手的编程思想、方法和技巧1》读书笔记和分享

    Go语言精进之路,从新手到高手的编程思想.方法和技巧 读书分享 1 本书定位 2 本书内容总览 3 选择本书的原因 4 小收获分享 第7-12条 真的不知道咋命名 第13-19条 能用--怎么用更好 ...

  3. r语言 悲观剪枝_R语言实战(5) ——高级数据管理

    往期回顾: R语言实战(1)--R语言介绍 R语言实战(2)--创建数据集 R语言实战(3)--图形初阶 R语言实战(4) --数据管理 本期是我们推出<R语言实战>赠书活动的最后一天啦! ...

  4. python语言程序设计慕课_中国大学MOOC(慕课)_Python语言程序设计基础_试题及答案...

    中国大学MOOC(慕课)_Python语言程序设计基础_试题及答案 更多相关问题 智慧职教: 反应级数的绝对值不会超过3,可以是正整数或者负整数,不能是分数. 在铆接过程中,铆孔的质量直接影响铆接质量 ...

  5. c 语言 double 除法_这是我的C语言入门笔记

    点击上方"C语言中文社区",选择"设为星标★" 技术干货第一时间送达! 来自:大鱼机器人 精彩回顾: [万字长文]C语言高效编程与代码优化,建议收藏![推荐] ...

  6. c语言程序设计实验与案例数组,新书推荐 | C语言程序设计+实验与题解

    原标题:新书推荐 | C语言程序设计+实验与题解 图书简介 本书以标准C为框架.按照紧扣基础和面向应用的原则,介绍了C语言程序设计的基本规范.思路和方法.本书从培养学生的实际编程能力出发,注重实例教学 ...

  7. ios开发语言本地国际化_开发人员软件本地化最终语言指南

    ios开发语言本地国际化 There are lots of great guides out there for how to prep your product for international ...

  8. 小马哥spring编程核心思想_求小马哥讲Spring栈核心编程思想 Spring IoC+Bean+Framework教程...

    这次搜集了下小马哥讲Spring栈核心编程思想 Spring IoC+Bean+Framework,最强Spring全面核心实战的视频教程,有需要的朋友可以自行下载学习. 课程简介: 小马哥出手的Sp ...

  9. r语言做断轴_手把手教你用R语言做回归后的残差分析

    本文介绍了做残差分析的方法及其重要性,以及利用R语言实现残差分析. 在这篇文章中,我们通过探索残差分析和用R可视化结果,深入研究了R语言. 残差本质上是当一个给定的模型(在文中是线性回归)不完全符合给 ...

最新文章

  1. word中复制、双击打开编辑公式(Axmath/mathtype)出现卡死(无响应)现象的解决方案
  2. 动态数据绑定之监听对象变化
  3. asp.net url重写相关技术问题整理
  4. 用JavaScript玩转计算机图形学(二)基本光源
  5. Python的Mixins机制
  6. ORACLE HANDBOOK系列之九:时间与时区(Time and Time Zone)
  7. 基于java的社交网站毕业设计_软件工程毕业设计_社交网站.pdf
  8. silverlight: [HtmlPage_NotEnabled] 调试资料字符串不可用的解决
  9. [SpringBoot2]原生组件注入_原生注解与Spring方式注入
  10. Mapreduce从HBASE抽取数据,生成搜索下拉服务数据,hadoop jar 调用异常问题解决
  11. 使用kubeasz自动化部署K8s
  12. Qt实现思维导图功能(一)
  13. 关于centos7重启报错:[sdb] Assuming drive cache: write through [sda] Assuming drive 解决如下
  14. #小何不断努力# Day1
  15. 线性可分支持向量机、线性支持向量机、非线性支持向量机的区别
  16. 计算机系统要素--第六章,01-HACK汇编编译器模块介绍
  17. e成科技人岗匹配中的匹配模型
  18. Qt关于tabWidget中tab样式的重绘
  19. 字符串—StringBuilder
  20. GardenPlanner 下载,园林绿化设计

热门文章

  1. 1 linux下tcp并发服务器的几种设计的模式套路,Linux下几种并发服务器的实现模式(详解)...
  2. LeetCode 120. 三角形最小路径和(动态规划)
  3. TensorFlow精进之路(十四):RNN训练MNIST数据集
  4. RGB数据保存为BMP图片
  5. Redis教程:数据对象分析(二)
  6. Cimag 用法总结
  7. 《0元搭建个人博客史上最详细教程》(域名申请及备案篇)
  8. 使用webstorm操作git
  9. Oracle学习 第20天 PL/SQL导入
  10. 数组 最大值,课堂测试