生信必备技巧之R语言基础教程--矩阵基础和进阶

  R语言是数学研究工作者设计的一种数学编程语言,主要用于统计分析、绘图、数据挖掘。R语言是解释运行的语言(与C语言的编译运行不同),它的执行速度比C语言慢得多,不利于优化。但它在语法层面提供了更加丰富的数据结构操作并且能够十分方便地输出文字和图形信息,所以它广泛应用于数学尤其是统计学领域。这也是大多数生信工作者选择R语言的原因。

矩阵:

矩阵是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型) 。可通过函数matrix创建矩阵。

  • 创建矩阵:

    # 基本语法:
    matrix(data = 1:10, nrow = 2, ncol = 5, byrow = TRUE, dimnames = NULL)
    
    # data 向量,矩阵的数据;nrow 行数;ncol 列数;
    # byrow 逻辑值,为 FALSE 按列排列,为 TRUE 按行排列;dimname 设置行和列的名称;
    
    # 基本方法:
    y <- matrix(1: 20, nrow=5, ncol=4)
    
    # 指定行名和列名:
    cells <- c(1,26,24,68) 
    rnames <- c("R1","R2") 
    cnames <- c("C1","C2") 
    mymatrix <- matrix(cells, nrow = 2, ncol = 2, byrow = TRUE, dimnames = list(rnames, cnames))
                       
    # byrow 为 TRUE 元素按行排列
    M <- matrix(c(3:14), nrow = 4, byrow = TRUE)
    
    # Ebyrow 为 FALSE 元素按列排列
    N <- matrix(c(3:14), nrow = 4, byrow = FALSE)
    
    
    # 行名和列名也可在创建完矩阵之后再定义:
    rownames(N) = c("row1", "row2", "row3", "row4")
    colnames(N) = c("col1", "col2", "col3")
    
    • 访问矩阵中的元素——矩阵下标的使用:
    # 创建矩阵:
    x<-matrix(1: 10, nrow=2)
    
    # 访问第二行:
    x[2,]
    
    # 访问第二列:
    x[,2]
    
    # 访问第一行第四个元素:
    x[1,4]
    
    # 修改矩阵中的元素:
    # 修改一整行:
    x[2,] <- c(12:16)
    
    # 修改某个元素:
    x[1,4] <- 10
    
  • 矩阵常用基本操作:

    # 获取矩阵的维度:
    dim(x)
    
    # 获取矩阵的行数和列数:
    dim(x)[1]
    dim(x)[2]
    
    nrow(x)
    ncol(x)
    
    # 转置矩阵
    # R 语言矩阵提供了 t() 函数,可以实现矩阵的行列互换。
    # 例如有个 m 行 n 列的矩阵,使用 t() 函数就能转换为 n 行 m 列的矩阵。
    
    # 创建一个 2 行 3 列的矩阵
    M = matrix( c(2,6,5,1,10,4), nrow = 2,ncol = 3,byrow = TRUE)
    
    # 转换为 3 行 2 列的矩阵
    t(M)
    
    
    # 矩阵加减:必须行数和列数都相等;
    # 创建 2 行 3 列的矩阵
    matrix1 <- matrix(c(7, 9, -1, 4, 2, 3), nrow = 2)
    matrix2 <- matrix(c(6, 1, 0, 9, 3, 2), nrow = 2)
    
    # 两个矩阵相加
    matrix1 + matrix2
    
    # 两个矩阵相减
    matrix1 - matrix2
    
    
    # 矩阵乘除:必须行数和列数都相等;
    # 两个矩阵对应元素相乘
    matrix1 * matrix2
    
    # 两个矩阵相除
    matrix1 / matrix2
    
    
    ## 线性代数中的矩阵相乘:必须满足m1*n * n*m2;即第一个矩阵的列数要和第二个矩阵的行数相等;
    # 创建 2 行 3 列的矩阵
    matrix1 <- matrix(c(7, 9, -1, 4, 2, 3), nrow = 5)
    matrix2 <- matrix(c(6, 1, 0, 9, 3, 2), nrow = 2)
    
    matrix1 %*% matrix2
    
  • 矩阵进阶操作:

      # 矩阵求行、列之和、平均数;
      rowSums(a) #按行求和
      colSums(a) #按列求和
      
      mean(a) #均值
      rowMeans(a) #行均值
      colMeans(a) #列均值
      
      # 矩阵行拼接和列拼接
      a <- matrix(rnorm(15),5,3)
      b <- matrix(rnorm(15),3,5)
      cbind(a,b)
      bind(a,b)
      
      # 矩阵求逆:solve()函数:
      a <- matrix(rnorm(16),4,4)
      solve(a)
      
      # 矩阵与其逆矩阵的乘积为对角矩阵
      round(solve(a)%*%a)
      
      # 对于奇异阵,并不存在逆矩阵,但是可以计算其广义逆矩阵
      a <- matrix(1:16,4,4)
      solve(a) # 报错;
      
      library(MASS)
      ginv(a)
      
      # 提取矩阵的主对角线元素
      mat <- matrix(1:16,4,4)
      diag(mat)
      
      # 生成对角线为1的对角矩阵:
      m <- diag(4)
      
      # 求矩阵的特征值和特征向量:
      d = matrix(c(17,22,27,22,29,36,27,36,45),3,3)
      d.e= eigen(d)
      
      # 矩阵的奇异值分解:
      A=matrix(1:18,3,6)
      A.s = svd(A)
      A.s$u%*%diag(A.s$d)%*%t(A.s$v) # a = udv’;u为左奇异向量;v为右奇异向量;
    

往期文章

  1. 生信必备技巧之R语言基础教程--R包安装和载入
  2. 生信必备技巧之R语言基础教程--向量基础和进阶
  3. 生信必备技巧之R语言基础教程--逻辑值用途
  4. 生信必备技巧之R语言基础教程--字符串处理进阶
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容