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)
}