生信人应这样学R语言

作者: 看远方的星 | 来源:发表于2018-12-28 23:36 被阅读46次

    一、介绍R语言及Rstudio

    1、R是用于统计分析绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具
    2、Rtudio

    image.png

    1)Source:(左上角1区): 代码的撰写
    2)Console:(左下角2区): 执行代码的地方,执行结果也会显示在这里。
    3)Environment, History, Connections:(右上角3区):

    • Environment:是用来记录当前变量的数值,方便查看当前变量的状况。
    • History:是所有在 Console区内代码执行的历史记录 。
    • Connections:是用来方便连接外部数据库。

    4)Files, Plots, Packages, Help, Viewer:(右下角4区):

    • Files:显示当前工作路径下的文件。
    • Plots:显示画好的图。
    • Packages:显示已经安装好了的包,打勾代表已经加载。
    • Help:查询函数如何使用。
    • Viewer:是用来显示本地网页文件。
      参考文章:https://www.jianshu.com/p/132919ca2ca9

    二、R语言基础变量讲解

    image.png image.png image.png
    1、创建向量:
    1)使用create创建向量 , c为create即g=c(1,10)
    2)使用:创建向量即a=1:10
    3)使用函数创建向量如B=LETTERS[1:10]a=seq(1,10)
    附:字符串要加单引号,若字符串本身有单引号,则需要加双引号围住带有单引号的字符串
    > g=c(1,10)      #使用create创建向量
    > g
    [1]  1 10
    > str(g)        # 查看对象g的结构
     num [1:2] 1 10     
    > a=seq(1,10)    #使用函数创建向量
    > a
     [1]  1  2  3  4  5  6  7  8  9 10
    > a=1:10   #使用:创建向量
    > a
     [1]  1  2  3  4  5  6  7  8  9 10
    > B=LETTERS[1:10]     #使用函数创建向量
    > B
     [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J"
    
    > c=("jack'jam")
    > c
    [1] "jack'jam"
    

    2、使用dim加维度 :
    dim(f)=c(2,5) #创建两行五列的维度
    结果为:

    image.png
    赋值: f[1,2]='5' 将f的第一行第二列变成字符串5。此时f的类型变成字符型,画图一般要求为数值型,所以,进行该操作后无法画图。
    > f[1,2]='5'
    > str(f)
     chr [1:2, 1:5] "1" "2" "5" "4" "5" "6" "7" "8" "9" "10"
    
    image.png

    3、str(x) :查看对象x的结构。str是structure的缩写。

    > str(a)
     int [1:2, 1:5] 1 2 3 4 5 6 7 8 9 10         # [1:2, 1:5] :表示两行五列
    
    image.png

    4、mode(x) :查看对象x的模式:空(NULL),数值(numeric),字符(character),逻辑(logical),复数(complex),列表(list),函数(function)。

    > mode (a)
    [1] "numeric"      #数值
    

    5、class(x): 查看对象x的类型:除了mode里列出的几种类型外,还有整数(integer),矩阵(matrix),因子(factor),阵列(array),数据框(data frame),时间序列(ts) 等其他类型。mode主要用于区别数据存放的方式,而class是一种更细微的分类方式,比如矩阵,就是一种更“有序”的数据存放方式。此命令比mode常用。

    > class(a)
    [1] "matrix"          # 矩阵类型
    
    • 数据框(data frame)与矩阵(matrix)的区别:在R语言中,一个二维数据既可以用matrix来表示,也可以用data.frame来表示,data.frame里面允许不同类型的数据存在,可以使用str()函数查看具体信息,而matrix里的所有数据都是同一种类型。
      使用cbind(),rbind(),as.matirx(),matrix()生成的是matrix类型,而read.table()和data.frame()生成的是data.frame类型。
      值得注意的是,虽然可以给matrix 的不同列命名,但是$在matrix是不能使用的。​
    > a=1:10
    > dim(a)=c(2,5)   
    > b=as.data.frame(a)
    > b[1,2]='6'
    > View(b)
    

    左右对齐证明是存在不同类型的数据,即原本a的矩阵变成了b的数据框。
    6、is系列函数(是否是)和as系列函数(转换)。
    7、建立索引数据框

    1) tmp=a[c(3,7,8),] :tmp为索引数据框,取a的3,7,8行(并不是第3,7,8行而是行的标题)所有列组成的数据框。

    image.png
    2)b=grep('RNA-Seq', a$Assay_Type) : b为索引数据框,取Assay_Type列中含有RNA-Seq的内容
    结果(下标)为:
    image.png
    c=grepl('RNA-Seq', a$Assay_Type) :c为索引数据框,取Assay_Type列中含有RNA-Seq的内容并判断正误(有疑惑)
    结果:
    image.png

    三、外部数据导入导出

    基本操作:读,写,取。
    read.table('tmp.txt', header=T):读取tmp.txt并取表头。(打完read.table,使用Tab键选择文件。)
    comment.char='!' :去除带有!的内容。
    write.csv(b,'afer.csv'):将b文件写入转成afer.csv文件。
    d=read.csv(afer.csv): 读取afer.csv文件并赋值给d。
    b=b[,-1]: 去除第一列内容。
    seq='\t' : 指定制表符分割。
    save(b, file='b_input.Rdata') : 将b文件转换成Rdata文件格式。


    四、中级变量操作

    掌握函数的规律,学会举一反三才是重点。

    image.png
    1、row.names=F : 去掉行名
    sort(a$MBases,decreasing=T)[1] : 对a中的MBases这一列以降序排列并取第一个值(即求最大值)。
    2、max(a$MBases): 求a中的MBases这一列的最大值。
    3、求行平均值:
    1)rowMeans(b)
    2)for (i in 1:nrow(b)){print(mean(as.numeric(b[i,])))}
    3)x=as.numeric(b[1,])appiy(b,1,function(x){mean(x)})
    4、自定义函数并使用:
    1)rowMax=function(x){apply(x,1,max)} #求行最大值
    使用:rowMax(b)
    2)jack = function(x){for(i in 1:nrow(b){x=as.numeric(b[i])y=x[1]+x[2]-x[3]+x[4]-x[5]+x[6] print(y)})}

    5、apply(b,1,sd): 求每一行的方差
    6、sort (apply(b,1,sd),decreasing=T)[1:50] 求最大方差(只取50个)
    7、sample(1:nrow(b),50) : 从b的第一行到最后一行随机抽取50个数

    五、热图(步骤:得到数据-->数据处理得到矩阵-->画图)

    基本了解:
    热图:表现一个数值矩阵,图上每一个小方格都是一个数值,按一条预设好的色彩变化尺(称为色键,Color Key),来给每个数值分配颜色,虽然看起来眼花,但道理却很简单。这幅图就是24个样本(列)中,30类基因(行)的表达情况。

    image.png

    https://www.sohu.com/a/225637183_170798
    基因表达矩阵:基因表达数据通常利用矩阵形式表示,称为基因表达矩阵。基因表达矩阵的行代表一个基因在不同环境条件下或不同时间点的表达,列代表不同条件或样本下(如组织、实验条件、处理因素等)所有基因的表达情况,每个格子的数据表示特定的基因在特定的样本中的表达水平。

    • 数据来源
      去ncbi官网选择GEO DataSet,输入gse17215 搜索。选择第一个(完全匹配)进入,进入Series Matrix File下载.matrix.txt.gz文件。
    image.png image.png
    • 文本数据处理(如有不懂参考本文外部数据导入导出)
      将下载的文件放进R的工作目录。
      1)解压使用excel打开(截图未截完,下面与图上结尾相似为数据矩阵):
      image.png
      2)使用R读取:
    > read.table('biodata/GSE93755-GPL17021_series_matrix.txt.gz')
    Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec,  : 
      line 79 did not have 2 elements
    

    去除带有!内容并取表头:
    共7列放不下放在后面


    image.png

    与Excel比较正确:


    image.png
    > a=read.table('biodata/GSE17215_series_matrix.txt',comment.char = '!',header = T)
    > write.csv(a,'a1.csv')
    > View(a)
    
    image.png

    rownames(a)=a[,1] :将第一列设置为行名,同时行名与列重复,需删除。得结果:


    a=a[,-1]: 删除第一列(即与行名重复的列,行名那列不是第一列)得结果矩阵:

    image.png
    • 画图
    > a = log2(a)
    > pheatmap::pheatmap(a[1:10,])
    

    结果为:


    image.png

    六、选取差异明显的基因的表达量矩阵绘制热图

    • library() #列出已安装的包。
    • R数据的保存与加载:
      可通过save()函数保存为.Rdata文件,通过load()函数将数据加载到R中。
    > save(a,file='d://data//dumData.Rdata')
    > load('d://data//dumData.Rdata')
    
    • apply函数是最常用的代替for循环的函数。apply函数可以对矩阵、数据框、数组(二维、多维),按行或列进行循环计算,对子元素进行迭代,并把子元素以参数传递的形式给自定义的FUN函数中,并以返回计算结果。

    函数定义:
    apply(X, MARGIN, FUN, ...)
    参数列表:
    X:数组、矩阵、数据框
    MARGIN: 按行计算或按按列计算,1表示按行,2表示按列
    FUN: 自定义的调用函数
    …: 更多参数,可选
    比如,对一个矩阵的每一行求和,下面就要用到apply做循环了。

    > x<-matrix(1:12,ncol=3)
    > apply(x,1,sum)
    [1] 15 18 21 24
    
    • library() : 加载包
    • n=t(scale(t(dat[cg,]))):取数据dat行含有cg的内容为t,再对t进行z-score标准化,重新取为t,赋值给n。
      scale函数详解:https://www.cnblogs.com/guo-xiang/p/7810071.html
    • 将n将n>2变成2,<-2的变成-2,从而提高差异。
    • 自定义一个函数,将一堆代码放进去,从而实现一个函数画热图。

    七、id转换

    基本思路
    1、去掉.分隔的后一部分(包含.):使用函数strsplit
    2、三个表进行关联,整合信息。(依据两个表含有共同Id): 使用函数merge
    3、出现重复,挑出重复部分:使用函数tableorder
    4、去重,排序:使用函数duplicatedmatch


    函数讲解

    1、strsplit()是一个拆分函数,该函数可以使用正则表达式进行匹配拆分。
    其命令形式为:strsplit(x, split, fixed= F, perl= F, useBytes= F)

    • 参数x为字符串格式向量,函数依次对向量的每个元素进行拆分(即拆分对象)
    • 参数split为拆分位置的字串向量,即在哪个字串处开始拆分;该参数默认是正则表达式匹配;若设置fixed= T则表示是用普通文本匹配或者正则表达式的精确匹配。用普通文本来匹配的运算速度要快些。
    • 参数perl的设置和perl的版本有关,表示可以使用perl语言里面的正则表达式。如果正则表达式过长,则可以考虑使用perl的正则来提高运算速度。
    • 参数useBytes表示是否逐字节进行匹配,默认为FALSE,表示是按字符匹配而不是按字节进行匹配。
      strsplit('ENSG000003.13','[.]')[[1]]:以ENSG000003.13为分割对象,以.号分割,取分割后的第一部分。

    2、R中的merge函数类似于Excel中的Vlookup,可以实现对两个数据表进行匹配和拼接的功能。与Excel不同之处在于merge函数有4种匹配拼接模式,分别为inner,left,right和outer模式。 其中inner为默认的匹配模式,可与sql语言中的join语句用法。

    merge(x, y, by = intersect(names(x), names(y))
    by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
          sort = TRUE, suffixes = c(".x",".y"),
          incomparables = NULL, ...)
    
    • x,y 要合并的两个数据集
    • by,用于连接两个数据集的列,intersect(a,b)值向量a,b的交集,names(x)指提取数据集x的列名 by = intersect(names(x), names(y)) 是获取数据集x,y的列名后,提取其公共列名,作为两个数据集的连接列, 当有多个公共列时,需用下标指出公共列,如names(x)[1],指定x数据集的第1列作为公共列
      也可以直接写为 by = '公共列名',前提是两个数据集中都有该列名,并且大小写完全一致,R语言区分大小写
    • by.x,by.y:指定依据哪些行合并数据框,默认值为相同列名的列
    • all,all.x,all.y:指定x和y的行是否应该全在输出文件
    • sort:by指定的列(即公共列)是否要排序
    • suffixes:指定除by外相同列名的后缀
    • incomparables:指定by中哪些单元不进行合并

    b=merge(a, gis, by='ensembl_id', all.x=T): 合并a和gis数据框,以ensembl_id为共同列,并指定a内容全部保留。另一个命令同理,把b和gis合并数据。

    3、函数table(求因子出现的频数):
    使用格式为:
    table(..., exclude = if (useNA == "no") c(NA, NaN), useNA = c("no", "ifany", "always"), dnn = list.names(...), deparse.level = 1)

    • ...:为要求频数的因子
    • 参数exclude表示哪些因子不计算。
      例子:table(table(d$ensembl_id)>1) 先在d中计算ensembl_id这一列出现的频数,再计算出频率大于1的ensembl_id的频数。结果:大于1的出现了151次,即ensembl_id有151个id出现重复。
      image.png

    4、order:排序(默认升序,decreasing=T时为降序)

    > d=1:10
    > order(d)
     [1]  1  2  3  4  5  6  7  8  9 10
    > order(d,decreasing = T)
     [1] 10  9  8  7  6  5  4  3  2  1
    

    例子:d=d[order(d$v1),]:d根据d中的v1列排序,再赋值给d

    5、duplicated函数是一个可以用来解决向量或者数据框重复值的函数,它会返回一个TRUE和FALSE的向量,以标注该索引所对应的值是否是前面数据所重复的值。(重复的值标记为TRUE,比如三个值一样,会被标记出一个FALSE和两个TRUE

    例子:d=d[!duplicated(d$v1)] :先找出d中v1重复的部分标记为TRUE,再取反( ),TRUE变成FALSE,FALSE变成TRUE,TRUE就是去掉重复部分的正确值。
    参考文章:http://blog.sina.com.cn/s/blog_bcc268080102wt3i.html

    6、match函数:匹配函数,返回x对应值在table中是否存在,并从1开始编号。
    用法:
    match(x,table,nomatch,incomparables)
    x是查询对象,table是待匹配的向量,nomatch是不匹配项的设置值(默认为NA值),incomparables设置table表中不参加匹配的数值,默认为NULL

    例子:d=d[match(a\$v1, d$v1),]:把a中v1列的顺序匹配到d中v1列再将其赋值给d。


    八、任意基因任意矩阵任意癌症表达量分组的生存分析

    1、基本了解:

    • 癌症和肿瘤基因图谱(Cancer Genome Atlas,TCGA)计划,试图通过应用基因组分析技术,特别是采用大规模的基因组测序,将人类全部癌症(近期目标为50种包括亚型在内的肿瘤)的基因组变异图谱绘制出来,并进行系统分析,旨在找到所有致癌和抑癌基因的微小变异,了解癌细胞发生、发展的机制,在此基础上取得新的诊断和治疗方法,最后可以勾画出整个新型“预防癌症的策略”。

    • TCGA 使命:提高人们对癌症发病分子基础的科学认识及提高我们诊断、治疗和预防癌症的能力

    • TCGA 目标:完成一套完整的与所有癌症基因组改变相关的“图谱”。


    2、基本思路:实现一个基因在TCGA数据库里的生存关系图

    第一种办法:使用网页工具: OncoLnchttp://www.oncolnc.org/
    第二种办法:使用R语言:由于需要数据,所以还是需要到网站下载:
    1)得到数据框:去到OncoLnc,在搜索框输入ARHGAP18。提交进入,选择一个刚兴趣的进入,在两个框各输入50,提交得出图片,点击click here下载文件得到画图的数据框,并放到R的工作目录。

    image.png
    image.png
    2、画图:
    • 将数据赋值给dat:
    > dat=read.csv('biodata/BLCA_93663_50_50.csv',header = T,sep = ',', fill = T)
    > View(dat)
    
    image.png

    install.packages('ggstatsplot')出现问题:


    image.png

    九、任意基因任意癌症表达量和临床性状关联

    • 某个基因在某个癌症的表达量:

    第一种办法:使用网页工具
    进入http://www.cbioportal.org/ 选择Ovary/Fallopian Tube (卵巢或输卵管)选择第一篇文章 在Enter Genes:第二个框输入人类基因ARHGAP18,提交。

    image.png
    得出结果:点击plot,根据你想知道的表达量,对左侧进行微调,得到最终结果。
    image.png
    附:得到数据(第二种办法):点击右上方图标,选择Data,下载得到plot.txt。
    image.png

    第二种办法:使用R语言
    1)得到数据:见第一种办法。
    2)将plot.txt放到R的工作目录。并执行以下代码:

    rm(list = ls()) 
    options(stringsAsFactors = F)
    a=read.table('plot.txt',header = T,sep = '\t',fill = T)
    colnames(a)=c('id','stage','gene','mut')
    dat=a
    library(ggstatsplot)
    ggbetweenstats(data = dat,x=stage,y=gene)
    
    

    得到结果:


    image.png
    image.png

    十、表达矩阵的样本的相关性
    整体思路:
    1.学会比较相关性即得出相关系数。
    2.学会删除低表达和不表达基因。

    • cor函数计算的是列与列间的相关系数,得到的举证C(i,j)是第i列与第j列相关系数。
    • rnorm(n, mean = 0, sd = 1)
      n 为产生随机值个数(长度),mean 是平均数, sd 是标准差 。
      使用该函数的时候后,一般要赋予它 3个值.
      rnorm() 函数会随机正态分布,然后随机抽样 或者取值 n 次,
      >rnorm(5,0,1) 以N(0,1)的正态分布,分别列出5个值。
      r 这列代表随机,可以替换成dnorm, pnorm, qnorm 作不同计算
      r = random = 随机, d= density = 密度, p= probability = 概率 , q =quantile = 分位
    > a=rnorm(10)   # 产生随机10个数
    > b=10*a+rnorm(10)
    > cor(a,b)       # 求a,b的相关性
    [1] 0.9950829
    

    Bioconductor的包:数据包、功能函数包、注释包

    > rm(list = ls())
    > options(stringsAsFactors = F)
    > library(airway)
    载入需要的程辑包:SummarizedExperiment
    载入需要的程辑包:GenomicRanges
    载入需要的程辑包:stats4
    载入需要的程辑包:BiocGenerics
    载入需要的程辑包:parallel
    
    载入程辑包:‘BiocGenerics’
    
    The following objects are masked from ‘package:parallel’:
    
        clusterApply, clusterApplyLB, clusterCall, clusterEvalQ, clusterExport,
        clusterMap, parApply, parCapply, parLapply, parLapplyLB, parRapply,
        parSapply, parSapplyLB
    
    The following objects are masked from ‘package:stats’:
    
        IQR, mad, sd, var, xtabs
    
    The following objects are masked from ‘package:base’:
    
        anyDuplicated, append, as.data.frame, basename, cbind, colMeans,
        colnames, colSums, dirname, do.call, duplicated, eval, evalq, Filter,
        Find, get, grep, grepl, intersect, is.unsorted, lapply, lengths, Map,
        mapply, match, mget, order, paste, pmax, pmax.int, pmin, pmin.int,
        Position, rank, rbind, Reduce, rowMeans, rownames, rowSums, sapply,
        setdiff, sort, table, tapply, union, unique, unsplit, which, which.max,
        which.min
    
    载入需要的程辑包:S4Vectors
    
    载入程辑包:‘S4Vectors’
    
    The following object is masked from ‘package:base’:
    
        expand.grid
    
    载入需要的程辑包:IRanges
    
    载入程辑包:‘IRanges’
    
    The following object is masked from ‘package:grDevices’:
    
        windows
    
    载入需要的程辑包:GenomeInfoDb
    载入需要的程辑包:Biobase
    Welcome to Bioconductor
    
        Vignettes contain introductory material; view with 'browseVignettes()'.
        To cite Bioconductor, see 'citation("Biobase")', and for packages
        'citation("pkgname")'.
    
    载入需要的程辑包:DelayedArray
    载入需要的程辑包:matrixStats
    
    载入程辑包:‘matrixStats’
    
    The following objects are masked from ‘package:Biobase’:
    
        anyMissing, rowMedians
    
    载入需要的程辑包:BiocParallel
    
    载入程辑包:‘DelayedArray’
    
    The following objects are masked from ‘package:matrixStats’:
    
        colMaxs, colMins, colRanges, rowMaxs, rowMins, rowRanges
    
    The following objects are masked from ‘package:base’:
    
        aperm, apply
    
    Warning message:
    程辑包‘matrixStats’是用R版本3.5.2 来建造的 
    > data(airway)
    > exprSet=assay(airway)
    > colnames(exprSet)
    [1] "SRR1039508" "SRR1039509" "SRR1039512" "SRR1039513" "SRR1039516" "SRR1039517"
    [7] "SRR1039520" "SRR1039521"
    > cor(exprSet[,1],exprSet[,2])      #求第一列基因和第二列基因的相关性
    [1] 0.9632268
    

    exprSet的内容:行为基因,列为样本


    image.png
    > cor(exprSet)   # 求表达矩阵样本的相关性
               SRR1039508 SRR1039509 SRR1039512 SRR1039513 SRR1039516 SRR1039517
    SRR1039508  1.0000000  0.9632268  0.9431333  0.8978772  0.9476515  0.9014495
    SRR1039509  0.9632268  1.0000000  0.9323701  0.9428196  0.9202060  0.9290967
    SRR1039512  0.9431333  0.9323701  1.0000000  0.9592993  0.9291853  0.9203183
    SRR1039513  0.8978772  0.9428196  0.9592993  1.0000000  0.8834640  0.9498761
    SRR1039516  0.9476515  0.9202060  0.9291853  0.8834640  1.0000000  0.9313570
    SRR1039517  0.9014495  0.9290967  0.9203183  0.9498761  0.9313570  1.0000000
    SRR1039520  0.9603249  0.9398292  0.9827034  0.9413725  0.9298860  0.9030552
    SRR1039521  0.9023008  0.9463991  0.9525262  0.9853059  0.8724714  0.9291902
               SRR1039520 SRR1039521
    SRR1039508  0.9603249  0.9023008
    SRR1039509  0.9398292  0.9463991
    SRR1039512  0.9827034  0.9525262
    SRR1039513  0.9413725  0.9853059
    SRR1039516  0.9298860  0.8724714
    SRR1039517  0.9030552  0.9291902
    SRR1039520  1.0000000  0.9559571
    SRR1039521  0.9559571  1.0000000
    

    画图:pheatmap::pheatmap(cor(exprSet))得到结果:

    附:
    1、更新R:
    install.packages("installr")
    library(installr)
    updateR()
    2、如何安装R包:

    if (!requireNamespace("BiocManager", quietly = TRUE)) 
    install.packages("BiocManager") ##判断是否存在BiocManager包,不存在的话安装
    options()$repos  ## 查看使用install.packages安装时的默认镜像
    options()$BioC_mirror ##查看使用bioconductor的默认镜像
    options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/") ##指定镜像,这个是中国科技大学镜像
    options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/")) ##指定install.packages安装镜像,这个是清华镜像
    

    • 一个基因在8个样本中大于5个样本不表达,需要删除。

    • apply(A,Margin,FUN,...)——A为矩阵,Margin设定待处理的维数,为1是横排(行),为2是竖排(列)做运算,Fun是运算函数


      image.png
    tabie(x>1) #统计x>1的频数
    sum(x>1)>5   # 将x>1的频次相加,并筛选出大于5的基因
    x=exprSet[2,]   #x赋值为exprSet的第二行
    apply(exprSet,1,function(x)sum(x>1)>5) 对exprSet矩阵中的行进行自定义函数的处理即判断每一行的和是否大于5。
    exprSet=exprSet[apply(exprSet,1,function(x)sum(x>1)>5), ] #筛选出表达量合格的基因
    

    附:小技巧:Ctrl+L : 清空console的内容

    group_list=colData(airway)[,3]     #colData 待理解
    tmp=data.frame(g=group_list) #将group_list转变成数据框并赋值给tmp
    M=cor(log2(exprSet+1))
    

    十一、芯片表达矩阵下游分析:
    boxplot 用于绘制箱线图

    十二、RNA-seq 表达矩阵差异分析

    rm(list = ls()) 
    options(stringsAsFactors = F)
    library(airway)
    data("airway")
    exprSet=assay(airway)
    colnames(exprSet)
    group_list=colData(airway)[,3]
    
    exprSet=exprSet[apply(exprSet, 1,function(x)sum(x>1)>5),]
    table(group_list)
    > table(group_list)
    group_list
      trt untrt 
        4     4 
    exprSet[1:4,1:4]
    > exprSet[1:4,1:4]
                    SRR1039508 SRR1039509 SRR1039512 SRR1039513
    ENSG00000000003        679        448        873        408
    ENSG00000000419        467        515        621        365
    ENSG00000000457        260        211        263        164
    ENSG00000000460         60         55         40         35
    dev.off()
    boxplot(exprSet)
    

    附:

    > data("airway")
    Warning message:
    In data("airway") : 没有‘airway’这个数据集
    

    airway位于bioconductor,


    友情阅读推荐:

    相关文章

      网友评论

        本文标题:生信人应这样学R语言

        本文链接:https://www.haomeiwen.com/subject/mrrylqtx.html