R语言是一门常用于数据分析、统计建模的计算机语言,它与主流的C/C++、Java、Python等语言相比,支持更多的数据类型,例如向量、矩阵,同时提供了多种统计和数学计算方法。
可以前往 https://www.r-project.org/ 下载R语言解释器,并且推荐使用 RStudio 这个R语言的集成开发环境。RStudio 可以在 https://www.rstudio.com/ 下载。
R语言基于向量运算
帮助及基本命令
清屏命令:Ctrl+L
导入包:library(base)
安装包:install.packages(base)
查看当前工作目录:getwd()
获取print函数的使用示例: example("print")
获取print函数的帮助: help("print")或?print
变量操作
赋值 x=23.54 x<-1 或者 1->x
x=23.54
floor(x) 【向下取整】
[1] 23
ceiling(x)【向上取整】
[1] 24
四则运算:+ - * /
乘方:2^3
不等于:2!=3
整数除法:5 %/% 3
结果为1
求余:5 %% 3
结果为2
字符串
用单引号 '
或双引号"
包裹起来的文字内容为字符串,如 'hello, world'
或 '123456'
。
x<-c(“hello”,“world”,"!")
nchar(x)【向量元素的字符个数】
[1] 5 5 1
length(x)【向量长度(向量元素的个数)】
[1] 3
x=“hello”
y<-“world”
paste(x,y)【使用paste()函数连接字符串】
[1] “hello world”
l<-c(“A&a”,“B&b”,“C&c”)
x<-strsplit(l,split="&")【使用strsplit()函数拆分】
x
[[1]]
[1] “A” “a”
[[2]]
[1] “B” “b”
[[3]]
[1] “C” “c”
unlist(x)【返回值是一个列表,用unlist()查看】
[1] “A” “a” “B” “b” “C” “c”
向量
R 语言中可以通过 c(...)
来声明一个向量,例如 x=c(2,5,7,4,5)
1、返回其中的某些元素
x[c(1,2)]
[1] 2 5
x[2:5]
[1] 5 7 4 5
x[c(2,4,3)]
[1] 5 4 7
2、删除其中的某些元素
x[-2]
[1] 2 7 4 5
x[-2:-4]
[1] 2 5
3、这两种只在输出时删除,在x向量中删除
x=x[-2]
x
[1] 2 7 4 5
x=x[-2:-4]
x
[1] 2
4、在向量中查找某些元素
y=c(2,5,4,7,8,9)
which(y==2)【查找2,返回的是2所在的位置】
[1] 1
which.max(y)
【查找向量y中的最大最小值,返回该数所在的位置】
[1] 6
which.min(y)
[1] 1subset(y,y>7)【对数据的某些字段进行操作】
[1] 8 9
5、对两个长度相等的向量进行四则运算的效果是向量中的每一个元素都与另一个向量中的每一个元素进行四则运算。而一个向量与一个数进行四则运算的效果是该向量中的所有元素都与这个数进行四则运算。如:
> x <- c(1, 2, 3, 4, 5)
> y <- c(1, 2, 3, 4, 5)
> x + y # 输出: [1] 2 4 6 8 10
> x + 1 # 输出: [1] 2 3 4 5 6
矩阵
R 语言中可以通过 matrix()
函数来创建矩阵。matrix()
的原型为
matrix(data=NA, nrow=1, ncol=1, byrow=FALSE, dinames=NULL)
其中:
data
: 矩阵的元素,通常为向量。nrow
和ncol
: 设定矩阵的行数和列数,一般只需设定其一,另一个会根据数据长度算出。byrow
: 设定矩阵的填充方式,值为TRUE
时按行填充。默认为FALSE
,即按列填充。
通过 matrix()
创建矩阵的例子如下:
> mat1 <- matrix(1:6, nrow=2) # 元素为1到6, 两行,按列填充
> mat1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> mat2 <- matrix(1:6, nrow=2, byrow=TRUE)
> mat2
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
此外还可以使用 dim()
通过向量来创建矩阵,例如:
> mat3 <- 1:6
> dim(mat3) <- c(3, 2) # 将元素为1到6变为3行2列的矩阵
> mat3
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
1、矩阵检索
A=matrix(1:12,3)
A[c(1,2,3)]【选取第1,2,3行】
[1] 1 2 3
A[3,2]【选取第三行,第二列元素】
[1] 6dim(A)【检索矩阵维数】
[1] 3 4
2、矩阵的转置
B=t(A)
B
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
[4,] 10 11 12
3、矩阵乘法
A * B:对应元素相乘,并且要求A和B维度一样
A * 2:每个元素乘以2
A %*% B:矩阵相乘,A是m×n的矩阵;B是n×k的矩阵,得 到m×k的矩阵
4、上三角、下三角矩阵、逆矩阵
lower.tri(A):返回一个和A同样尺寸的矩阵,下三角返回真
upper.tri(A):返回一个和A同样尺寸的矩阵,上三角返回真
A=matrix(1:16,4)
lower.tri(A)
[,1] [,2] [,3] [,4]
[1,] FALSE FALSE FALSE FALSE
[2,] TRUE FALSE FALSE FALSE
[3,] TRUE TRUE FALSE FALSE
[4,] TRUE TRUE TRUE FALSE
A
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16A[lower.tri(A)]<-0【将下三角清零】
A
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 0 6 10 14
[3,] 0 0 11 15
[4,] 0 0 0 16
B=solve(A)【生成A的逆矩阵】
B
[,1] [,2] [,3] [,4]
[1,] 1 -0.8333333 -0.06060606 -0.026515152
[2,] 0 0.1666667 -0.15151515 -0.003787879
[3,] 0 0.0000000 0.09090909 -0.085227273
[4,] 0 0.0000000 0.00000000 0.062500000
生成时间序列
通过 ts()
函数可以将一个向量或矩阵转成一个一元或多元的时间序列(ts)对象,ts()
函数的原型为:ts(data = NA, start = 1, end = numeric(0), frequency = 1, deltat = 1, ts.eps = getOption("ts.eps"), class, names)
。其中:
data
要生成时间序列的向量或矩阵。start
第一个观测值的时间。end
最后一个观测值的时间。frequency
单位时间内观测值的频数。deltat
两个观测值之间的时间间隔。ts.eps
序列之间的误差限。若序列之间的频率差异小于ts.eps
则认为这些序列的频率相等。class
对象的类型。一元序列默认为ts
,多元序列默认为c("mts", "ts")
。names
给出多元序列中每个一元序列的名称,默认为Series 1, Series 2, ...
。
下面是一个例子:
> ts(1:26, start = 1986)
Time Series:
Start = 1986
End = 2011
Frequency = 1
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
[18] 18 19 20 21 22 23 24 25 26
画图
R 语言中可以直接使用 plot()
函数来绘制图像,例如:
> x <- rnorm(10)
> plot(x)
> x
[1] -0.3329234 1.3631137 -0.4691473 0.8428756
[5] -1.4579937 -0.4003059 -0.7764173 -0.3692965
[9] 1.2401015 -0.1074338
还可以直接绘制时间序列的图像:
> plot(ts(x))
为了将多幅图画在一起,可以使用 par()
函数:
op <- par(mfrow=c(2, 1), mar=c(5, 4, 2, 2) + .1) # mfrow 指定了图像矩阵为两行一列,即画两幅图,每行一幅;mar 指定了图像的边界,分别是下、左、上、右,可以根据喜好指定
plot(ts(x))
acf(z, main = “” ) # 计算 acf 函数