R语言入门系列1

时间:2023-02-10 20:02:24

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