R語言基礎-矩陣和列表

2.矩陣

2.1矩陣的創建

矩陣在R語言中是按列存儲的,即先存儲第一列再存儲第二列。

> y<-matrix(c(1,2,3,4),nrow=2,ncol=2)

> y

    [,1] [,2]

[1,]   1    3

[2,]   2    4

2.2矩陣運算

矩陣相乘:                  x%*%y

矩陣Hadamard積: x*y

矩陣轉置:                  t(y)

矩陣對角元素:           diag(y)

以對角元素生成矩陣:                   diag(diag(y))

矩陣求逆:                    solve(y)

R語言對於矩陣還有很多操作:比如

 矩陣的特徵值與特徵向量, 矩陣的Choleskey分解, 矩陣奇異值分解等等。

2.3 apply函數在矩陣中的應用

Apply()通過對數組或者矩陣的一個維度使用函數生成值得列表或者數組、向量。

apply(m, dim, fun, ...)

m表示一個矩陣

dim爲1時表示對矩陣行應用函數,dim爲2時,表示對矩陣列應用行數。

Fun是應用的函數。

> z

    [,1] [,2]

[1,]   1    3

[2,]   2    4

> apply(z,2,mean)

[1] 1.5 3.5

對矩陣z每列求均值。

簡單的例子;

findols<-function(x){

findol<-function(xrow){

mdn = mean(xrow)                      //求向量平均值

devs =abs(xrow-mdn)                 //求向量每個數與均值的差,存入devs

return (which.max(devs))             //求devs中與均值差最大的數

}

return (appaly(x,1,,findol)            //對x的沒一列應用findol數
}

3.列表List

向量元素要求都是同類型的,而列表與向量不同,可以組合多個不同類型的對象,類似C語言中的結構體。

3.1創建列表

列表其實就是向量,之前的向量可以稱爲“原子型”向量,而列表是屬於“遞歸型列表”。

實例;

> li<-list(name ="jhon",salary = 5000,age = 23)

> li

$name

[1] "jhon"

 

$salary

[1] 5000

 

$age

[1] 23

Name salary age 被稱爲標籤,也可以不指定標籤。

可以通過標籤訪問list

> li$name

[1] "jhon"

3.2 列表索引

除了通過標籤訪問列表,還可以通過索引訪問

> li[[1]]

[1] "jhon"

> li[["name"]]

[1] "jhon"

列表添加元素

> li$sex<-"male"

> li

$name

[1] "john"

 

$salary

[1] 5000

 

$age

[1] 23

 

$sex

[1] "male"

 

刪除元素時,可以直接把元素置爲NULL,

> li$name <- NULL

> li$age <- NULL

> li$salary <- NULL

> li

$sex

[1] "male"

使用那麼函數獲取列表標籤值:

> names(li)

[1] "sex"

3.3 實例

獲取文本中各單詞出現在哪些位置

findwords<-function(tf){

txt <- scanf(tf," ")

wl <- list();                                 //列表生成

for(i in 1:length(txt)){                 //循環遍歷列表

       wrd<- txt[i]

       wl[[wrd]]<- c(wl[[wrd]],i)  //加上當前位置

}

return(wl)

}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章