数组与矩阵的建立
前面已经指出数组是一个kp¥ 1q维的数据表; 矩阵是数组的一个特例,其 维数k 2,而上面所述的向量自然也可看成维数为k 1的数组5. 而且向量、 数组或者矩阵中的所有元素都必须是同一种类型的. 对于一个向量,其属性由 其类型和长度构成;而对于数组与矩阵, 除了类型和长度两个属性外, 还需要 维数dim这个属性来描述. 因此如果一个向量需要在R中以数组的方式被处理, 则必须含有一个维数向量作为它的dim属性。
数组的建立
R中数组由函数array( )建立, 其一般格式为:
> array(data, dim, dimnames)
其中data为一向量, 其元素用于构建数组; dim为数组的维数向量(为数值型向量); dimnames为由各维的名称构成的向量(为字符型向量), 缺省为空.
以一个3维的数据为例来说明. 设A是一个存放在向量a中的24个数据项组成的数组, A的维数向量为c(3,4,2). 维数可由命令
> dim(A) <- c(3,4,2)
建立. 这样, 命令
> A <- array(a, dim = c(3,4,2))
就建立了数组A. 24个数据项在数组A中的顺序依次为: a[1,1,1],a[2,1,1].....a[2,4,2],a[3,4,2] 我们再来看一个具体的例子:
> A <- array(1:8, dim = c(2, 2, 2))
> A
, , 1
[,1] [,2]
[1,] 1 3
[2,] 2 4
, , 2
[,1] [,2]
[1,] 5 7
[2,] 6 8
> dim(A)
[1] 2 2 2
> dimnames(A) <- list(c("a", "b"), c("c", "d"), c("e", "f"))
> A
, , e
c d
a 1 3
b 2 4
, , f
c d
a 5 7
b 6 8
> colnames(A)
[1] "c" "d"
> rownames(A)
[1] "a" "b"
> dimnames(A)
[[1]]
[1] "a" "b"
[[2]]
[1] "c" "d"
[[3]]
[1] "e" "f"
如果数据项太少,则采用循环准则填充数组(或矩阵), 见下面的的第二个例子.
矩阵的建立
因为矩阵是数组的特例,因此矩阵也可以用函数array( )来建立, 例如
> A <- array(1:6, c(2,3))
> A
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> A<-array(1:4,c(2,3))
> A
[,1] [,2] [,3]
[1,] 1 3 1
[2,] 2 4 2
> A<-array(1:8,c(2,3))
> A
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
然而, 由于矩阵在数学及统计中的特殊性, 在R中最为常用的是使用命令matrix( )建立矩阵, 而对角矩阵用函数diag( )建立更为方便, 例如
> X <- matrix(1, nr = 2, nc = 2)
[,1] [,2]
[1,] 1 1
[2,] 1 1
> X <- diag(3) # 生成单位阵
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
> v <- c(10, 20, 30)
> diag(v)
[,1] [,2] [,3]
[1,] 10 0 0
[2,] 0 20 0
[3,] 0 0 30
> diag(2.5, nr = 3, nc = 5)
[,1] [,2] [,3] [,4] [,5]
[1,] 2.5 0.0 0.0 0 0
[2,] 0.0 2.5 0.0 0 0
[3,] 0.0 0.0 2.5 0 0
> X <- matrix(1:4, 2) # 等价于X <- matrix(1:4, 2, 2)
> X
[,1] [,2]
[1,] 1 3
[2,] 2 4
> rownames(X) <- c("a", "b")
> colnames(X) <- c("c", "d")
> X
c d
a 1 3
b 2 4
> dim(X)
[1] 2 2
> dimnames(X)
[[1]]
[1] "a" "b"
[[2]]
[1] "c" "d"
注意:
循环准则仍然适用于matrix( ), 但要求数据项的个数等于矩阵的列数的倍数, 否则会出现警告.
矩阵的维数使用c( )会得到不同的结果(除非是方阵), 因此需要小心.
数据项填充矩阵的方向可通过参数byrow来指定, 其缺省是按列填充的(byrow=FALSE). byrow=TRUE表示按行填充数据.
暂无数据