1. R对象都有两个基本属性:moede()类型属性和length()长度属性,类似的向量的类型有logical(逻辑性)、numeric(数值型)、complex(复数型)、character(字符型)。
Eg: Z<-0:9
Z<-as.character(Z) 把数值型Z转化为字符型Z
2. 缩短向量的长度: Eg: x<-c(2,4,6,8,10),
length(x)<-3
此时x为2,4,6
3. attributes()返回对象的各种特殊属性组成的列表,不包括固有属性mode()和length()
eg: x <-c(apple=2.5,orange=2.1);x
apple orange
2.5 2.1
> attributes(x)
$names
[1] "apple" "orange"
> attr(x,"names") 存取对象的名为names的属性
[1] "apple" "orange"
> attr(x,"names") <-c("apple","grapes") 定义新的属性
> x
apple grapes
2.5 2.1
4. factor()函数 可以用来把一个向量编码成为一个因子
Eg: >sex<-c("M","F","M","M","F")
> sexf<-factor(sex)
> sexf
[1] M F M M F
Levels: F M
可以用is.factor()检验对象是否为因子,用as.factor()把一个向量转化成为一个因子,对于因子向量,可以用table()来统计各类数据的频数.
Eg: > sex.table<-table(sexf)
> sex.table
sexf
F M
2 3
5.tapply(x,index.fun) 其中x为以对象,index是与x有同样长度的因子,fun是要计算的函数
Eg: > height <- c(174, 165, 180, 171, 160)
> tapply(height,sex,mean) 分组求身高的平均值
F M
162.5 175.0
6.数组可以看成是带多个下标的类型相同的元素的集合,常用的是数值型的数组如矩阵,向量只有定义了维数向量(dim属性)后才能被看着数组。
Eg: >z<-1:12
> dim(z)<-c(3,4)
> z
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
7.用array(data,dim=length(data),dimnames)来构造多维数组, 其中data是一个向量数据,dim是数组各维的长度。
Eg: >x<-array(1:20,dim=c(4,5)) 产生一个4*5的二维数组
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
> x<-array(0,dim=c(3,4,2)) 产生一个3*4*2的三维数组,其元素均为0,常用此方法对数组进行初始化。
> x
, , 1
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 0 0 0 0
[3,] 0 0 0 0
, , 2
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 0 0 0 0
[3,] 0 0 0 0
8.用matrix()函数构造矩阵,注:数组的加减运算和数乘运算满足矩阵运算的性质,但数组的乘除运算实际上是数组中对应元素的位置做运算。
matrix(data,nrow=1,ncol=2,byrow=FALSE,dimnames=NULL),data是一个向量数据,nrow是矩阵的行数,ncol是矩阵的列数,当byrow=TRUE时,生成矩阵的数据按行放置。
>a=matrix(1:20,4,5,byrow=TRUE)
> a
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
[3,] 11 12 13 14 15
[4,] 16 17 18 19 20
> a[]<-0 在不改变数组维数的条件下把元素赋值为0
> a
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 0 0 0 0 0
[3,] 0 0 0 0 0
[4,] 0 0 0 0 0
9. t(a) 表示矩阵a的转置
det(a) 表示求方阵a行列式的值
x%*%y crossprod(x,y) 表示x与y做内积
a%*%b表示通常意义下的两个矩阵的乘积
crossprod(a,b)表示的是t(a)%*%b tcrossprod(a,b)表示的是a%*%t(b)
diag(v) 表示以v的元素为对角线元素的对角阵,当v为一矩阵时,表示的是取对角线上的元素为向量
solve(a) 表示求矩阵a的逆,solve(a,b)求解线性方程组ax=b
eigen(a) 表示求对称矩阵a的特征值与特征向量,是由列表形式给出的
> a<-matrix(c(1:8,10),3,3,byrow=TRUE)
> a
[,1][,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 10
> b<-crossprod(a,a)
> b
[,1][,2] [,3]
[1,] 66 78 97
[2,] 78 93 116
[3,] 97 116 145
> ev<-eigen(b)
> ev
$values 特征值
[1] 303.19533618 0.76590739 0.03875643
$vectors 特征向量
[,1] [,2] [,3]
[1,] -0.4646675 0.833286355 0.2995295
[2,] -0.5537546 -0.009499485 -0.8326258
[3,] -0.6909703 -0.552759994 0.4658502
10.矩阵的奇异值分解
svd(a) 表示对矩阵a做奇异值分解,a=udv’,其中u、v为正交矩阵,d为对角矩阵,也就是矩阵a的奇异值,svd(a)的返回值也是列表。
> a<-matrix(c(1:8,10),3,3,byrow=TRUE)
> svd(a)
$d 矩阵d的对角线线上的元素
[1] 17.4125052 0.8751614 0.1968665
$u 正交矩阵u
[,1] [,2] [,3]
[1,] -0.2093373 0.96438514 0.1616762
[2,] -0.5038485 0.03532145 -0.8630696
[3,] -0.8380421 -0.26213299 0.4785099
$v 正交矩阵v
[,1] [,2] [,3]
[1,] -0.4646675 -0.833286355 0.2995295
[2,] -0.5537546 0.009499485 -0.8326258
[3,] -0.6909703 0.552759994 0.4658502