热线电话:13121318867

登录
2020-08-23 阅读量: 1688
R语言数组与矩阵的建立

数组与矩阵的建立

前面已经指出数组是一个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表示按行填充数据.


37.8010
0
关注作者
收藏
评论(0)

发表评论

暂无数据