目录
- 首先
- 导言
- 基本原理与概念
基本原理
赋值分配(assign)等操作
在线帮助- R的数据操作
对象
在文件中读写数据
存储数据
生成数据
- 规则序列
- 随机序列
使用对象- 创建对象
- 对象的类型及转换
- 运算符
- 访问一个对象的数值: 下标系统
- 访问对象的名称
- 数据编辑器
- 数学运算和一些简单的函数
- 矩阵计算
- R绘图
管理绘图
绘图函数
低级绘图命令
绘图参数
一个实例
grid和lattice包- R的统计分析
关于方差分析的一个简单例子
公式
泛型函数
包- R编程实践
循环和向量化
用R写程序
编写自己的函数
首先
- 基础部分对重点知识做了摘抄
- 绘图部分列出了提纲
- 关于统计,函数及其参数还需要慢慢积累总结
- R for Beginners 电子版
导言[1]
- R的开发及由来. 贝尔实验室&S语言
- R的编码及安装. 基于C及Fortran编写&Comprehensive R Archive Network(CRAN)有详细安装及包使用指南
- 强大的统计分析和作图功能.
- 灵活性. 作为计算机语言的一种, 与语言编写的窗口化工具相比, 其可以使用各种编程语句, 切分提取数据, 满足更多的个性化需求
基本原理与概念
基本原理
- R是解释性语言, 而非编译语言. python同样是, 而C&Foortan&Pascal就是编译语言,运行效率高很多
- 所有变量, 数据, 函数及结果都已对象(object)的形式存在计算机的内存中, 并冠有相应的名称
- 基本工作原理: 用户通过键鼠输入调用库(library)中的函数→计算机根据指令进行诸如读取, 计算, 显示, 网络调用等流程→将结果储存在对象(object)中
- 对象的名称不能以数字开头, 大小写代表不同的对象
赋值分配(assign)等操作
-
赋值. 三者有差别
->
<-
=
-
显示内存中所有对象
ls() #只输出对象名称
ls(pat="X") #指定显示某个对象及其赋值, pat即pattern
ls(pat="^X") #正则表达式
ls.str() #输出对象名称+赋值
在线帮助
-
最常用
?ls()
help(ls)
-
未导入内存的
help("bs",package="splines")
-
搜索某一变量
help.search("tree")
R的数据操作
对象
-
对象的两个内在属性: 类型(
mode()
函数)和长度(length()
函数)类型分为: 数字型, 字符型, 复数型和逻辑性(TRUE&FALSE)
长度是对元素中数目的统计
字符串引用单引号双引号问题, 与perl和python相似
Inf
和-Inf
表示±∞,NaN
表示非数字
在文件中读写数据
首先通过
getwd("")
确定工作目录-
mydata <- read.table("文件")
, 可用制表符分隔的txt文件, 以下为缺省值read.table(file, header = FALSE, sep = "", quote = "\"’", dec = ".", row.names, col.names, as.is = FALSE, na.strings = "NA", colClasses = NA, nrows = -1, skip = 0, check.names = TRUE, fill = !blank.lines.skip,strip.white = FALSE, blank.lines.skip = TRUE, comment.char = "#")
-
mydata <- scan("文件", what=list("",0,0))
, what后表示第一个为字符变量, 后两个为数值变量, 忽略what则创建数值变量scan(file = "", what = double(0), nmax = -1, n = -1, sep = "", quote = if (sep=="\n") "" else "’\"", dec = ".", skip = 0, nlines = 0, na.strings = "NA", flush = FALSE, fill = FALSE, strip.white = FALSE, quiet = FALSE, blank.lines.skip = TRUE, multi.line = TRUE, comment.char = "")
mydata <- read.fwf("文件",widths=c(数字,数字,数字...))
, widths表示读取每个字段的宽度, 将一整行字符按要求拆分成相应个数的相应长度, 其余选项与read.table()
相同-
补充:
read.csv(file, header = TRUE, sep = ",", quote="\"", dec=".", fill = TRUE, ...)
read.csv2(file, header = TRUE, sep = ";", quote="\"", dec=",", fill = TRUE, ...)
read.delim(file, header = TRUE, sep = "\t", quote="\"", dec=".", fill = TRUE, ...)
read.delim2(file, header = TRUE, sep = "\t", quote="\"", dec=",", fill = TRUE, ...)
存储数据
-
write.table()
write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ", eol = "\n", na = "NA", dec = ".", row.names = TRUE, col.names = TRUE, qmethod = c("escape", "double"))
save(x,y,z,file="xyz.RData")
&load("xyz.RData")
save.image()
生成数据
上部分介绍了自动读取和输出, 以下列举的均为手动生成数据用到的函数
规则序列
-
函数中变量的赋值与python相似,ex.
seq(1,9,5
)&seq(length=9, from=1,to=5)
, 完全相同 -
:
优先级很高,ex.1:10-1
&1:(10-1)
-
创建数据框
expand.grid(h=c(60,80),w=c(100,300),sex=c("male","female"))
h w sex 1 60 100 male 2 80 100 male 3 60 300 male 4 80 300 male 5 60 100 female 6 80 100 female 7 60 300 female 8 80 300 female
注: 数据行数等于 2✖️2✖️2, 内部可以加入
seq()
等其他函数 -
几个常用函数:
seq(x,x,x)
scan()
rep(x,x)
-
sequence(x:x)
&sequence(c(x,x,x,...))
gl(x,x,label=c("xx","xx"...),length=x)
随机序列
- 在统计学中, 产生随机序列特别重要, 表中介绍了很多函数
- 函数大多命名为
rXXX()
, 可以通过?rXXX()
查看说明, 会发现还有d/p/q...XXX()
多中使用方法, 区别在于缺省值不同 - 复习过统计学相关知识后在回头总结
使用对象
创建对象
- 向量
- 因子
- 矩阵
- 数据框
- 列表
- 时间序列
- 表达式
对象的类型及转换
格式转换有很多限制条件, 先记基础知识吧
-
转数据型
as.numeric()
-
转逻辑型
as.logical()
-
转字符型
as.character()
运算符
包括三种运算符
-
数学运算
+ - * / ^ %% #模 %/% #整除
-
比较运算符
< > <= >= == !=
-
逻辑运算符
! #逻辑非 & #逻辑与 && #同上 | #逻辑或 || #同上 xor(x,y) #异或
注:
1. 比较运算符作用在两个被比较对象的每个元素上, ex.
x >- 1:3; y >- 1:3 x==y
2. &和|作用在对象中的每一个元素上并且返回和比较次数相等长度的逻辑值; &&和||只作用在对象的第一个元素上
-
比较函数
identical(x,y)
all.equal(x,y)
访问一个对象的数值: 下标系统
与python和perl极为相似, 只是略过复杂
- 第一个元素从
x[1]
开始 - 方括号内可以一次性取多个数值, 也可以嵌合其他函数
- 对矩阵取值时, 缺省返回维数尽可能低的对象, 可以通过
x[,2, drop = FALSE]
返回矩阵 - 方括号中
-
表示不显示某值, 同样可以嵌合其他函数 -
我的理解: 嵌合逻辑下标(TRUE/FALSE)时, 对象中每个元素通过
1/0
取舍 -
[[]]
方括号套方括号
访问对象的名称
names是一个和对象有同样长度的向量并且可以通过函数names来访问
一般情况下, 对象是没有names的, ex.
names(x)
对象赋予names, ex.
names(x) <- c("a","b", "c"...) #赋予名称的数量要≤对象中元素的数目
-
对于矩阵
行names
rownames(x)
列names
colnames(x)
返回全部names列表
dimnames(x)
数据编辑器
data.entry(x)
- High Sierra 10.13.6之后不再随附X11, 但可以手动下载安装XQuartz
- 可能需要重启才能正产使用
数学运算和一些简单的函数
相同长度的向量运算, 逐个元素运算
-
不同长度的向量运算, 最短的元素会重复使用
x <- 1:4 y <- 1:2 z <- x + y
不同长度, 长度也不成倍数时, 运行会有警告信息, 仍然会将最短的元素重复使用
常用函数及部分统计函数见原文P33, 34, 太TM多了...
矩阵计算
-
上下合并矩阵
rbind(m1,m2)
-
左右合并矩阵
cbind(m1,m2)
-
两矩阵相乘
m1 %*% m2
-
提取/修整/创建对角线
提取:
diag(m1)
修整:
diag(m1) <- 10
创建:
v <- c(10,20,30) diag(v) diag(1.2, nr = 3, nc = 5)
R绘图
以下三个章节概括了R的主要内容, 但要熟练使用R, 需要
- 掌握接触的统计知识
- 熟悉尽可能多的函数及其参数
- 实践出真知
因为统计知识比较匮乏, 以下记录只是为了形成一个框架
管理绘图
Rstudio集成了各种工具, 不需要通过
x11()
开启绘图窗口-
图形分割(也不知道放到这有啥特殊的意义)
构建矩阵
matrix()
layout(矩阵)
展示分隔结果
layout.show()
-
ex.
m <- matrix(1:4, 2, 2) layout(m, widths=c(1, 3), heights=c(3, 1)) layout.show(4)
绘图函数
表中列举了常用的基础绘图函数, 第二遍每个都用一下
低级绘图命令
挺详细的, 诸如如何画水平线,长方形, 添加标题等等表中都有介绍, 后重点对插入公式做了重点介绍
绘图参数
上两节介绍的是常用函数, 这节讲的是函数中常用的参数, 诸如字体大小,对齐方式,背景颜色,实线虚线等等表中都有介绍, 后重点对标记符号的种类做了列举
一个实例
-
基础
x <- rnorm(10) y <- rnorm(10) plot(x,y)
-
调整参数(低级)
plot(x, y, xlab="Ten random values", ylab="Ten other values", xlim=c(-2, 2), ylim=c(-2, 2), pch=22, col="red", bg="yellow", bty="l", tcl=0.4, main="How to customize a plot with R", las=1, cex=1.5)
-
调整参数(初级)
opar <- par() par(bg="lightyellow", col.axis="blue", mar=c(4, 4, 2.5, 0.25)) plot(x, y, xlab="Ten random values", ylab="Ten other values", xlim=c(-2, 2), ylim=c(-2, 2), pch=22, col="red", bg="yellow", bty="l", tcl=-.25, las=1, cex=1.5) title("How to customize a plot with R (bis)", font.main=3, adj=1) par(opar)
par()
存储有全部缺省值, 思路: 保存缺省值→修改缺省值→绘图→通过基础绘图命令添加title→还原回之前的缺省值 -
调整参数(高级)—全部调整了
par()
的参数opar <- par() par(bg="lightgray", mar=c(2.5, 1.5, 2.5, 0.25)) plot(x, y, type="n", xlab="", ylab="", xlim=c(-2, 2), ylim=c(-2, 2), xaxt="n", yaxt="n") rect(-3, -3, 3, 3, col="cornsilk") points(x, y, pch=10, col="red", cex=2) axis(side=1, c(-2, 0, 2), tcl=-0.2, labels=FALSE) axis(side=2, -1:1, tcl=-0.2, labels=FALSE) title("How to customize a plot with R (ter)", font.main=4, adj=1, cex.main=1) mtext("Ten random values", side=1, line=1, at=1, cex=0.9, font=3) mtext("Ten other values", line=0.5, at=-1.8, cex=0.9, font=3) mtext(c(-2, 0, 2), side=1, las=1, at=c(-2, 0, 2), line=0.3, col="blue", cex=0.9) mtext(-1:1, side=2, las=1, at=-1:1, line=0.2, col="blue", cex=0.9) par(opar)
grid和lattice包
R的统计分析
前三小节涉及很多统计分析的函数
关于方差分析的一个简单例子
公式
泛型函数
包
- 常用简单R包描述
- R包几种不同的安装方法
R编程实践
对于本章所讲的内容, 我的理解是, R包括for
,if
等基础语句, 但所谓的程序和函数, 是上几章作图过程中所调用的内容, 导入数据到生成统计结果的代码即是所谓的R程序
循环和向量化
用R写程序
编写自己的函数
相比python 和perl 真的死板一些, 有很多要记住并熟练使用的参数和模型
-
来源于2005重新修订的第二版, 由华东师范大学汤银才老师团队翻译整理 ↩