通过c
函数创建的数据结构即向量,向量之间可以进行元素一对一的四则混合运算
> xs <- c(1,2,3)
> ys <- c(4,5,6)
> xs + ys
[1] 5 7 9
> xs / ys
[1] 0.25 0.40 0.50
通过[]
可以索引向量中的元素,但是和C, Python
等编程语言不同,R语言的索引下标从1开始,并且支持多个值同时索引
> xs[1]
[1] 1
> ys[2]
[1] 5
> (xs/ys)[3]
[1] 0.5
> xs[c(1,3)]
[1] 1 3
通过:
表达式,可以不同c
直接创建新向量
> zs <- 1:10
> zs[2:4]
[1] 2 3 4
通过:
表达式生成的是特定区间内的自然数组,seq
函数则提供了等差数组的生成方式,其输入参数有3个,分别表示数组区间以及元素间隔
> seq(1,10,2) # 从1到10,生成间隔为2的等差向量
[1] 1 3 5 7 9
通过rep
,可以创建元素重复的向量,输入参数分别为待重复元素和重复次数
> rep(1,5)
[1] 1 1 1 1 1
> rep(1:2, 5)[1] 1 2 1 2 1 2 1 2 1 2
矩阵的初始化可通过matrix
函数,其输入参数为矩阵元素和形状,示例如下
> matrix(1:12, 3, 4)[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> matrix(1:12, 4, 3)[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
通过[]
可以提取矩阵中的元素,不同维度的序号之间用,
分割。
维度相同的矩阵支持常规的加减乘除等运算,此外,R语言提供了便捷的矩阵计算支持,通过%*%
可实现矩阵乘法
> m1 = matrix(1:12, 3, 4)
> m2 = matrix(1:12, 4, 3)
> m1 %*% m2[,1] [,2] [,3]
[1,] 70 158 246
[2,] 80 184 288
[3,] 90 210 330
此外,R语言还提供了一些矩阵函数
类别 | 说明 |
---|---|
求和 | 按列求和colSums ;按行求和rowSums |
均值 | 各列均值colMeans ;各行均值rowMeans |
属性 | 转置t ;行列式det ;对角元素diag |
求积 | 内积crossprod(m1, m2) ;外积outer(m1, m2) |
求解 | 求逆solve ;特征值和特征向量eigen |
示例如下
> crossprod(m1, m1)[,1] [,2] [,3] [,4]
[1,] 14 32 50 68
[2,] 32 77 122 167
[3,] 50 122 194 266
[4,] 68 167 266 365
> outer(c1, c2)[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 2 4 6 8 10
[3,] 3 6 9 12 15
[4,] 4 8 12 16 20
[5,] 5 10 15 20 25
数组可理解为张量,从而向量和矩阵均为数组的特殊情况,即分别是一维数组和二维数组。
通过array
可以创建高维数组,其输入参数分别为数组元素、数组维度以及各维度名称。
array(data, dim=length(data), dimnames=NULL)
示例如下
> a1 <- array(1:12, dim=c(2,3,2))
> a1
, , 1[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6, , 2[,1] [,2] [,3]
[1,] 7 9 11
[2,] 8 10 12
[]
同样可以访问数组元素,不同维度之间用,
隔开,如果某一维度未声明特定的值,就提取这个维度的所有元素
> a1[1,2,1]
[1] 3
> a1[1,2,2]
[1] 9
> a1[,2,2]
[1] 9 10
> a1[,2,][,1] [,2]
[1,] 3 9
[2,] 4 10
在R语言中,提供了一些统计函数,适用于数组、矩阵以及向量等数据结构
函数 | 说明 | 函数 | 说明 |
---|---|---|---|
sum | 求和 | mean | 求平均值 |
var | 方差 | sd | 标准差 |
min | 最小值 | max | 最大值 |
range | 取值范围 |
示例如下
> sum(c1)
[1] 15
> sum(m1)
[1] 78
> sum(a1)
[1] 78
> sd(m1)
[1] 3.605551
下一篇:常见背包问题