**说明:**本节中大部分内容摘自书籍《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)
b <- c("one", "two", "three")
c <- c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE)
d<-1:10 #生成1-10整数向量
2. 矩阵
矩阵是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)。
myymatrix <- matrix(vector, nrow=number_of_rows,ncol=number_of_columns, byrow=logical_value,
dimnames=list(char_vector_rownames, char_vector_colnames))
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,
exclude = NA, ordered = is.ordered(x), nmax = NA)
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为例
df<-data.frame(x=1:10,y=rnorm(10, mean=0, sd=1))
用法 |
说明 |
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) #均匀分布
rnorm(n, mean=0, sd=1) #正态分布
控制语句与循环语句
控制语句
if(cond) expr
if(cond) cons.expr else alt.expr
if...else if...else
ifelse(test, yes, no)
switch(expr, ...)
expr:可以为一个数字或字符串
...:为一系列选择项列
若expr为字符串,...列表项为name_i=expr_i
若expr为数字,...列表项按顺序输出
循环语句
for(var in seq) expr
while(cond) expr
repeat expr
循环语句关键字
break
:跳出整个循环语句
continue
: 跳出本次循环
next
:跳出本次loop
自定义函数
function( arglist ) {
expr
return(object) }
… (dot-dot-dot):此特殊参数可以捕获任何数量的参数
example:
>>>"%s*%" <- function(x,y) rep(x,y) #自定义二元符号
>>>"a"%s*%5
>>>"aaaaa"
调试
函数 |
用法 |
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的人。