R語(yǔ)言中的數(shù)組和列表
R語(yǔ)言中的數(shù)組與其它語(yǔ)言數(shù)組類似,它是一種高維的數(shù)據(jù)結(jié)構(gòu)。維數(shù)過(guò)高運(yùn)算會(huì)很不方便,所以用的很少,這里介紹是本著不落下任何知識(shí)點(diǎn)的目的。萬(wàn)一以后遇到了,雖然不方便,還是可以進(jìn)行運(yùn)算的。當(dāng)然了,矩陣是二維數(shù)組,是數(shù)組的一種特殊形式。R中的列表是一種特殊的數(shù)組,每個(gè)元素又可以是一個(gè)列表可以含有多個(gè)元素,里面可以包含各種數(shù)據(jù)類型,故功能非常強(qiáng)大。
數(shù)組
數(shù)組有一個(gè)維數(shù)向量,可以定義數(shù)組的維數(shù),通過(guò)array()進(jìn)行創(chuàng)建數(shù)組如下:
> arr <- array(c(1:24),dim = c(2,3,4)) > dim(arr) [1] 2 3 4 > arr , , 1 [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 , , 2 [,1] [,2] [,3] [1,] 7 9 11 [2,] 8 10 12 , , 3 [,1] [,2] [,3] [1,] 13 15 17 [2,] 14 16 18 , , 4 [,1] [,2] [,3] [1,] 19 21 23 [2,] 20 22 24 > class(arr) [1] "array"
以上創(chuàng)建語(yǔ)句,第一個(gè)參數(shù)表示用1:24作為數(shù)組的數(shù)據(jù),dim = c(2,3,4)表示數(shù)組維數(shù)為2x3x4。
我們也可以用下面這種方式定義數(shù)組:
> arr1 <- c(1:24) > dim(arr1) <- c(2,3,4) > arr1 , , 1 [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 , , 2 [,1] [,2] [,3] [1,] 7 9 11 [2,] 8 10 12 , , 3 [,1] [,2] [,3] [1,] 13 15 17 [2,] 14 16 18 , , 4 [,1] [,2] [,3] [1,] 19 21 23 [2,] 20 22 24 > class(arr1) [1] "array"
這種方式就是先指定向量c(1:24)為數(shù)組的數(shù)據(jù),再指定其維數(shù)為2x3x4,最后其類型仍然為"array"。
矩陣的取塊,其實(shí)與上節(jié)講的矩陣取值一樣。比如:
> arr[1,,] [,1] [,2] [,3] [,4] [1,] 1 7 13 19 [2,] 3 9 15 21 [3,] 5 11 17 23
我們可以將數(shù)組轉(zhuǎn)化為矩陣,比如我們嘗試將arr這個(gè)數(shù)組轉(zhuǎn)化為矩陣:
a <- as.matrix(arr)
猜測(cè)一下,a會(huì)長(zhǎng)什么樣?我們看一下,哈哈!
> a [,1] [1,] 1 [2,] 2 [3,] 3 [4,] 4 [5,] 5 [6,] 6 [7,] 7 [8,] 8 [9,] 9 [10,] 10 [11,] 11 [12,] 12 [13,] 13 [14,] 14 [15,] 15 [16,] 16 [17,] 17 [18,] 18 [19,] 19 [20,] 20 [21,] 21 [22,] 22 [23,] 23 [24,] 24 > dim(a) [1] 24 1
竟然是一個(gè)24x1的矩陣,沒(méi)想到吧。
列表
R中用list()創(chuàng)建列表,比如
> li <- list(c(1:3),c('a','b'),c(4:6)) > li [[1]] [1] 1 2 3 [[2]] [1] "a" "b" [[3]] [1] 4 5 6
這個(gè)列表包含三個(gè)元素,分別是c(1:3),c('a','b'),c(4:6),而每個(gè)元素又是一個(gè)數(shù)據(jù)集合,我現(xiàn)在要取第一個(gè)元素的第三個(gè)元素(就是3)
> li[[1]][1] [1] 1
取第一個(gè)元素,就是
> li[1] [[1]] [1] 1 2 3
列表的每個(gè)元素還是列表,同樣說(shuō)明列表可以嵌套。具體定位到最里層元素就是相應(yīng)數(shù)據(jù)類型了:
> class(li[[1]][1]) [1] "integer" > li[[2]][1] [1] "a" > class(li[[2]][1]) [1] "character"
我們可以給列表每個(gè)元素取一個(gè)名字
> names(li) <- c('a1','a2','a3')
> li
a2
[1] "a" "b"
$a3
[1] 4 5 6
為什么取名字呢,這樣我們引用時(shí)可以直接利用美元符號(hào)“$”+名字‘a(chǎn)1’,’a2‘,‘a(chǎn)3’,而不需要寫[[1]]那么麻煩了。
> lia2[1]
[1] "a"
其實(shí),給列表起名字還有更方便之處,這才是最終目的:可以在綁定數(shù)據(jù)后,直接引用列表元素名即可。
綁定列表用attach()
> attach(li)
然后,就可以直接引用列表元素名了。
> a1 [1] 1 2 3 > a2[2] [1] "b"
關(guān)于R語(yǔ)言中的數(shù)組和列表(主要是列表)用法很靈活多樣,在以后我們會(huì)有實(shí)戰(zhàn)應(yīng)用會(huì)用到。
作者:柯廣的網(wǎng)絡(luò)日志
微信公眾號(hào):Java大數(shù)據(jù)與數(shù)據(jù)倉(cāng)庫(kù)