數組與矩陣的建立
前面已經指出數組是一個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表示按行填充數據.








暫無數據