R语言入门

R的历史

R的前身S

  1. R是S的方言
  2. S Initial Version,1976年,最初是Fortran的统计分析库,作者John Chambers
  3. S Version 3,1988年,用C语言实现,Statistical Models 《白皮书》,引入统计建模的功能
  4. S Version 4,1998年,最新版 之后基本没有改动,Programming with Data 《绿皮书》
  5. 所有权变更:Bell实验室 + → Insightful + → TIBCO
  6. 荣誉:1998年 Association for Computing Machinery’s Software System Award

S哲学(id:anchor1)

John Chambers在Stages in the Evolution of S一书中写到:

we wanted users to be able to begin in an interactive environment, where they did not consciously think of themselves as programming. Then as their needs became clearer and their sophistication increased, they should be able to slide gradually into programming, when the language and system aspects would become more important.

从S到R

  1. 1991年诞生,作者Ross lhakaRobert Gentleman
  2. 1993年发布
  3. 1995年成为使用GNU GPL的自由软件
  4. 1996年组建公共邮件列表:R-help 和 R-devel
  5. 1997年R核心开发团队成立,掌管R的源码
  6. 2000年,R Version 1.00 发布
  7. 2013年,R Version 3.0.2 发布

R的特性

  • 语法Syntax与S相似
  • 语义Semantic和S差别很大(虽然表面上很相似)
  • 跨平台
  • 开发活跃,一年一个主版本
  • Quite lean 核心很小,众多功能分布在各个包中
  • 强大的绘图能力
  • 不仅有强大的交互性,而且是编程语言。实现用户到程序员的转变(S的哲学(#anchor1))
  • 活跃的社区

自由软件

四大基本原则

  • freedom 0,不论处于什么目的,你都有使用该软件的自由
  • freedom 1,你有研究软件运作方式的自由,也可以根据需要对其进行修改。(也就是保证你可以获得软件的源码)
  • freedom 2,你有重新分发软件的自由(你甚至可以将软件卖给他人)
  • freedom 3,你可以改进软件并向公众开放

R的缺点

  1. 基于40年前的技术
  2. 对动态和三维图像的支持较差(最近已有改进)
  3. 功能与客户需求和基本用户的分布有关(若是缺少某个功能,你就得自己去写)
  4. R对象必须储存在物理内存中(对象大小不能超过内存的大小,不然装不进去,在大数据时代这是一个短板)
  5. R不是万能的

R系统设计

从概念划分,R系统分为两部分:

  1. base:从CRAN下载的基本系统
  2. Everything else

资料

CRAN

  • An Introduction to R:熟悉R的基本功能
  • Writing R Extensions:如何写R包
  • R Data Import/Export
  • R Installation and Administration:如何从源码编译R
  • R Internals:R的底层实现(玻璃心勿读)

主要课本

  • Chambers (2008). Software for Data Analysis, Springer. (your textbook)
  • Chambers (1998). Programming with Data, Springer.
  • Venables & Ripley (2002). Modern Applied Statistics with S, Springer.
  • Venables & Ripley (2000). S Programming, Springer.
  • Pinheiro & Bates (2000). Mixed-Effects Models in S and S-PLUS, Springer.
  • Murrell (2005). R Graphics, Chapman & Hall/CRC Press.

其他参考书


数据类型

术语

一、对象 Object

R语言处理操作的一切东西都是对象。

二、数据对象

R有5种基本的(原子的)数据对象

  1. 字符
  2. 数值型(实数或小数)
  3. 整型
  4. 复数
  5. 逻辑型

三、基本对象

  1. R最常见的基本对象是向量(vector)
  2. 向量可以包含同一类型的多个对象。

标准的向量不能包含不同类型(class)的对象

但是,有一种向量可以包含不同类型的对象,这种向量叫做列表(list)

vector()创建向量

四、数字

  1. R中的数字默认就是数值型(双精度实数):即使1,2这样的整数也是数值对象。
  2. 整型用L后缀显示声明:比如1L
  3. 特殊值

Inf 无穷大。可以像实数一样参与运算:1/0 等于inf,1/inf 等于0。

NaN 不是数字not a number,表示未定义值(undefined value),或表示缺失值(missing value)。0/0 会返回Nan。

五、对象可以属性 attribute

对象不是必须有属性

常用属性有:

  1. names, dimnames
  2. dimensions(比如矩阵有行数和列数)
  3. class(每个对象都有的类属性,比如数值对象的类是数值,整数对象的类是整数)
  4. length(每个对象都有的长度属性,简单向量的长度就是向量中的元素数量)
  5. other user-defined attributes/metadata(这些属性可以分别用不同的属性函数来定义)

使用attributes()设定或修改属性

六、赋值运算符 <-

> x <- 1         ## x是数值向量,其第一个元素是数值1
> print(x)
[1] 1
> x ## 不需要显式调用print()
[1] 1
> msg <- “hello” ## msj是字符向量,其第一个元素是字符串”hello”

七、求值 Evaluation

> x <- 5         ## 没有输出
> x ## auto-printing 自动打印出x的值
[1] 5
> print(x) ## explict printing 显式调用print()打印x的值
[1] 5

[1]是什么?

它表示元素在向量里的序号,这里是说5是x向量的第一个元素

八、打印 Printing

> x <- 1:20      ## : 操作符用来创建整数序列
> x
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
[16] 16 17 18 19