说明:本节中大部分内容摘自书籍《R语言实战(第2版)》
RStudio: Take control of your R code
RStudio是R的集成开发环境(IDE)。它包括一个控制台,支持直接代码执行的语法高亮编辑器,以及绘图,历史记录,调试和工作区管理工具。
RStudio可用于开源和商业版本,并可在桌面(Windows,Mac和Linux)或连接到RStudio Server或RStudio Server Pro(Debian / Ubuntu,RedHat / CentOS和SUSE Linux)的浏览器上运行。
在 RStudio 下使用 R 的基本功能
RStudio参考卡片
数据处理一般流程
R 数据结构
R拥有许多用于存储数据的对象类型,包括标量、向量、矩阵、数组、数据框和列表。
1. 向量
向量是用于存储数值型、字符型或逻辑型数据的一维数组。
a <- c(1, 2, 5, 3, 6, -2, 4) |
2. 矩阵
矩阵是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)。
myymatrix <- matrix(vector, nrow=number_of_rows,ncol=number_of_columns, byrow=logical_value, |
3. 数组
数组(array)与矩阵类似,但是维度可以大于2。
myarray <- array(vector, dimensions, dimnames) |
4. 数据框
由于不同的列可以包含不同模式(数值型、字符型等)的数据,数据框的概念较矩阵来说更 为一般。
mydata <- data.frame(col1, col2, col3,...) |
5. 因子
变量可归结为名义型、有序型或连续型变量。名义型变量是没有顺序之分的类别 变量。有序型变量表示一种顺序关系,而非数量关系。
类别(名义型)变量和有序类别(有序型)变量在R中称为因子(factor)。因子在R中非 常重要,因为它决定了数据的分析方式以及如何进行视觉呈现。
factor(x = character(), levels, labels = levels, |
6. 列表
列表(list)是R的数据类型中为复杂的一种。一般来说,列表就是一些对象(或成分, component)的有序集合。列表允许你整合若干(可能无关的)对象到单个对象名下。
mylist <- list(object1, object2, ...) |
7. 日期值
as.Date(x, "input_format") |
日期值的默认输入格式为yyyy-mm-dd
。
mydates <- as.Date(c("2007-06-22", "2004-02-13"),"%Y-%m-%d") |
format符号 | 含义 | 示例 |
---|---|---|
%d | 数字表示的日期(0~31) | 01~31 |
%a | 缩写的星期名 | Mon |
%A | 非缩写星期名 | Monday |
%m | 月份(00~12) | 00~12 |
%b | 缩写的月份 | Jan |
%B | 非缩写月份 | January |
%y | 两位数的年份 | 07 |
%Y | 四位数的年份 | 2007 |
8. 索引和切片
以data.frame为例
# 以data.frame为例 |
用法 | 说明 |
---|---|
df[3,5] |
|
df['x'] |
返回x列,data.frame类型 |
df$x , df[[x]] |
返回向量类型 |
df[c(1,3,5), ] |
|
df[-(1:5),] |
除了1-5列(R 中- 是排除的意思) |
df[x>3,] |
逻辑索引 |
df[x %in% c(3,5))] |
R 运算符
数学运算 | 描述 |
---|---|
+, -, *, / |
|
^, ** |
求幂 |
x%%y |
求余(x mod y)。5%%2 的结果为 1 |
x%/%y |
整数除法。5%/%2 的结果为 2 |
关系 | 逻辑运算 |
---|---|
< ,<= |
!x |
>,>= |
x|y |
==,!= |
x & y |
概率函数
在R中,概率函数统一格式为:[dpqr]distribution_abbreviation()
其中第一个字母表示其所指分布的某一方面
首字母 | 说明 | 主参数 | 返回值 | 示例 |
---|---|---|---|---|
p | 分布函数(distribution function) | 分位数x值 | 概率值F(x)=P{X<=x} | pnorm(q) |
d | 密度函数(density) | 分位数x值 | 密度值f(x)=dF/dx | dnorm(x) |
q | 分位数函数(quantile function) | 概率P值 | 分位数x | qnorm§ |
r | 生成随机数 | 随机数n | 随机向量密度值 | rnorm(n) |
概率分布
分布名称 | 缩写 | 分布名称 | 缩写 |
---|---|---|---|
Beta 分布 | beta | Logistic 分布 | logis |
二项分布 | binom | 多项分布 | multinom |
柯西分布 | cauchy | 负二项分布 | nbinom |
(非中心)卡方分布 | chsiq | 正态分布 | norm |
指数分布 | exp | 泊松分布 | pois |
F分布 | f | Wilcoxon 符号秩分布 | signrank |
Gamma分布 | gamma | t分布 | t |
几何分布 | geom | 均匀分布 | unif |
超几何分布 | hyper | Weibull 分布 | weibull |
对数正态分布 | lnorm | Wilcoxon 秩和分布 | wilcox |
runif(n, min=0, max=1) #均匀分布 |
控制语句与循环语句
控制语句
if(cond) expr |
循环语句
for(var in seq) expr |
循环语句关键字
break
:跳出整个循环语句
continue
: 跳出本次循环
next
:跳出本次loop
自定义函数
function( arglist ) { |
… (dot-dot-dot):此特殊参数可以捕获任何数量的参数
example:
>>>"%s*%" <- function(x,y) rep(x,y) #自定义二元符号 |
调试
函数 | 用法 |
---|---|
stop(message) | 停止执行当前表达式返回message(常与if配合检查自定义函数参数) |
stopifnot(logit1,logit2,logit3…) | 检查每个参数为TRUE,否则停止执行当前表达式返回message |
拟合线性模型formula
在R中,拟合线性模型基本的函数就是lm(),格式为:
myfit <- lm(formula, data) |
formula指要拟合的模型形式,
data是一个数据框,包含了用于拟合模型的数据。
结果对象(本例中是myfit)存储在一个列表中,包含了所拟合模型的大量信息。
表达式(formula) 形式如下: Y ~ X1 + X2 + ... + Xk
~
左边为响应变量,右边为各个预测变量,预测变量之间用+
符号分隔。
formula常用符号 | 说明 | 示例 |
---|---|---|
~ | 分隔符,左边为响应变量,右边为解释变量 | |
+ | 预测变量分隔符 | y~x+y |
: | 预测变量交互项 | y~x+y+x:y |
* | 包含所有交互项的简洁方式 | 代码y~ x * z可展开为y ~ x + z + x:z |
^ | 交互项的最高次数 | 代码 y ~ (x + z + w)^2 可展开为 y ~ x + z + w + x:z + x:w + z:w |
.(dot) | 除因变量外的所有变量 | y~. |
- | 移除一项 | y~xzw–x:z:w可展开为 y ~ (x + z + w)^2 |
-1 | 移除截距 | y~x-1 |
I() | 算术 | y~x+I(x^2) |
function | 数学函数 | log(y) ~ x + z + w |
R语言可视化
除了基础图形,grid、lattice和ggplot2软件包也提供了图形系统,它们克服了R基础图 形系统的低效性,大大扩展了R的绘图能力。
- grid图形系统可以很容易地控制图形基础单元,给予编程者创作图形的极大灵活性。
- lattice包通过一维、二维或三维条件绘图,即所谓的网格图形(trellis graph)来对多元变量关 系进行直观展示。
- ggplot2包极大地扩展 了R绘图的范畴,提高了图形的质量。
系统 | 基础安装中是否包含 | 是否需要显式加载 |
---|---|---|
base | 是 | 否 |
grid | 是 | 是 |
lattice | 是 | 是 |
ggplot2 | 否 | 是 |
data.table 和 tidyverse
data.table
R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快。
包括两个方面,一方面是写的快,代码简洁,只要一行命令就可以完成诸多任务。
另一方面是处理快,内部处理的步骤进行了程序上的优化,使用多线程,甚至很多函数是使用C写的,大大加快数据运行速度。因此,在对大数据处理上,使用data.table无疑具有极高的效率。
tidyverse
tidyverse是一系列包的组合,构建了一套完整的数据分析生态链,提供了一套整洁的数据导入,分析和建模方法,刷新了R语言原有的数据科学体系。
作者 Hadley Wickham 在R语言数据科学领域是个鼎鼎有名的大人物,被称为一个改变了R的人。