学习者:骆栢维
题目来源:生信基石之R语言
初级10 个题目:http://www.bio-info-trainee.com/3793.html
备注:本文为笔者学习健明老师GitHub答案代码的学习收获!
Q1:R包安装
#设置镜像 ->安装R包->加载R包options("repos"=c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))install.packages(c("ggplot2", "pheatmap", "ggpubr", "tidyr", "dplyr", "stringr"))#options(BIOCONDUCTOR_ONLINE_VERSION_DIAGNOSIS=FALSE)#如果无法建立链接,可以运行此代码或者观察IE浏览器的情况options(BioC_mirror="http://mirrors.tuna.tsinghua.edu.cn/bioconductor")if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager")c "org.Hs.eg.db","hgu133plus2.db")BiocManager::install(c,ask = F,update = F)##也可以使用循环结构哦library(GSEABase)library(GSVA)library(clusterProfiler)library(ggplot2)library(ggpubr)library(hgu133plus2.db)library(limma)library(org.Hs.eg.db)library(pheatmap)##注意下载好R包并不代表可以直接使用,还需要加载加入当前工作环境中#笔者就不加载所有了
学习心得:R包的安装
1.R包的安装步骤:设置镜像 ->安装R包->加载R包(十分重要!!!)
2.R包的安装方式:通过R-studio安装/本地安装(这些是笔者尝试过的方法,好使!)
3.在做这个联系的时候笔者遇到了一个报错:
URL'https://mirrors.tuna.tsinghua.edu.cn/bioconductor/packages/3.10/workflows/src/contrib/PACKAGES
(怎么解决这个问题呢?首先在杀毒软件,将R加入白名单——(如果解决不了)运行一下
options(BIOCONDUCTOR_ONLINE_VERSION_DIAGNOSIS=FALSE)
——(还是不行呢!很气人)可以进入IE浏览器,观察它是否能够正常运行,如果不能就针对相应问题解决,然后就可以了
为什么要观察IE浏览器呢?根据笔者查阅的资料得知,我们下载R包是默认从IE浏览器下载。
4.也可以运行一下这个代码
options(download.file.method = 'libcurl');options(url.method='libcurl') `
(方法源于公众号:生信技能树)
Q2:打开 Rstudio 查找工作目录
#打开 Rstudio 告诉我它的工作目录----getwd()#获取当前工作目录setwd("C://Users//luobo//Documents//生信学习-R语言//R_questions//初级")#设置工作目录,注意//
Q3:新建6个向量,基于不同的类型
#方法:c(),rep(),seq()a b c d e e1 f g class(b)#查看数据类型
Q4:新建一些数据结构,比如矩阵,数组,数据框,列表等重点是数据框,矩阵
##向量见Q3##函数matrix创建矩阵x y rowname colnnme z dimnames=list(rowname,colnnme))#设置行列名##函数data.frame新建数据框 L3 #set.seed(6)#如果想要随机数的结果不变,需要设置“种子”,里面的数值是自己定义的fac d y = rep(seq(1,5),2), fac = fac)##函数array创建数组dim1 dim2 dim3 myarray #1:16表示设置数组的具体内容,c(2,4,2)可以理解为宽,长,高(因为可以想象数组为一个三位结构)##函数list创建列表,列表可以存在多个数据结构a b c mylist
Q5:在新建的数据框进行切片操作,比如首先取第1,5行,然后取第2,3列
myrow mycol
学习心得:
提取数据的方法可以根据“名称”、“逻辑值” 和 “位置”,笔者上面是按照位置提取数据。
Q6:使用data函数来加载R内置数据集 rivers
data("rivers")
Q7:下载 https://www.ncbi.nlm.nih.gov/sra?term=SRP133642 里面的 RunInfo Table 文件读入到R里面,了解这个数据框,多少列,每一列都是什么属性的元素。
runinfostr(runinfo)#看每一行数据类型,详细内容dim(runinfo)#看维度
Q8:下载 https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE111229 里面的样本信息sample.csv读入到R里面,了解这个数据框,多少列,每一列都是什么属性的元素
sample ##其他的同Q7
Q9:把前面两个步骤的两个表(RunInfo Table 文件,样本信息sample.csv)关联起来把前面两个步骤的两个表(RunInfo Table 文件,样本信息sample.csv)关联起来
?merge()final_file by.y = "Accession", all = TRUE)##注意当合并的两个项目的列表名不同时的合并方法#ORlibrary(dplyr)final1_file #ORfinal2_file #ORcolnames(sample)colnames(sample) "SRA.Accession","Contact","Release.Date")final_file save(final_file,file = "final_file.Rdata")
实战一下吧——基因注释
##########################实战一下################################exprset head(exprset)#看一下前6行platform head(platform)finalfile head(finalfile)library(dplyr)finalfile everything())#重新排列,everything()表示除前面两个外其余的head(finalfile)
学习心得:数据框的处理——合(数据框的五大操作:增删改查合)
本习题中,笔者使用了常见的合并数据框的方法:merge,inner_join和cbind。merge和inner_join基本上没有太大差距(但是笔者比较喜欢merge),cbind要注意它是单纯的合并,并没有进行“对应结合”,即内容不一致也可以合并。
Q9:对前面读取的 RunInfo Table 文件在R里面探索其MBases列,包括 箱线图(boxplot)和五分位数(fivenum),还有频数图(hist),以及密度图(density)
library(ggplot2)boxplot(runinfo$MBases)plot(fivenum(runinfo$MBases))plot(hist(runinfo$MBases))plot(density(runinfo$MBases))
Q10:把前面读取的样本信息表格的样本名根据下划线分割看第3列元素的统计情况。第三列代表该样本所在的plate
visual=final_file[,c("MBases","Title")]class(visual$Title)##注意此时Title为factorvisual$Title plate=unlist(lapply(visual$Title,function(x){ x strsplit(x,'_')[[1]][3]}))##其他方法plate1=substr(visual$Title,8,11)##更加简单table(plate)
实战一下吧——TCGA数据处理
load(file = "TCGA_exprSet.Rdata")exprSet exprSet[1:4,1:4]exprSet$type=substr(rownames(exprSet),14,15)#提取样本信息exprSet exprSet[1:4,1:4]exprSet$sample "tumor","normal")#注意要把type转变为数值型as.numeric#ifelse表示如果条件成立,执行第一个结果,否则第二个结果#留意TCGA命名规则,01-09表示肿瘤样本,10-19为正常样本exprSet
学习心得:字符串的数据处理——字符切割
1.本习题中笔者使用了strsplist函数以及unlist函数,这两个函数常常一起用(针对于字符串提取)
为什么呢?因为strsplist切割的结果为“list”数据结构,为了方便提取对应的字符,用unlist函数破坏它,将其转变为“character”。
2.此外,还有更方便的方法:substr和substring(两者有什么区别呢?substr要设置“下限”,而substring不用)
Q11:根据plate把关联到的 RunInfo Table信息的MBases列分组检验是否有统计学显著的差异
t.test(visual$MBases~plate)#以plate作为分组变量,对MBases进行t检验#t = 2.3019, df = 728.18, p-value = 0.02162(p值小于0.05,可以认为有差异性)
Q12:分组绘制箱线图(boxplot),频数图(hist),以及密度图(density)
#可视化boxplot(runinfo$MBases~plate)#以plate分组,绘制箱线图plate install.packages("sm")library(sm)sm.density.compare(visual$MBases,plate)##分组绘制密度图,前面变量代表待画数据,后面代表分组
Q13:使用ggplot2把上面的图进行重新绘制
visual$plate=platelibrary(ggplot2)ggplot(visual,aes(x=plate,y=MBases))+geom_boxplot()#ggplot前面变量为数据,aes表示映射,后面geom_boxplot()代表画什么图ggplot(visual,aes(x=MBases,fill=plate))+geom_histogram()ggplot(visual,aes(x=MBases))+geom_density(aes(color=plate))
Q14:使用ggpubr把上面的图进行重新绘制
library(ggpubr)p color = "plate", palette = "jco", add = "jitter")#x,y表示xy轴数据,color= "plate"表示按plate描绘颜色,palette表示颜色设置p palette = c("#00AFBB", "#E7B800"), bins =100)#color和fill都是按plate设置颜色,不同的是color表示绘制边框颜色,fill填充图形颜色
几点思考:
1.如果遇到报错不要慌,学着解读报错内容;
2.其次,多用几个help()和?(一个不行就两个??),笔者在合并数据框的时候,由于对于函数的不足够了解,没有相同的列名怎么合并呢?重改列名太麻烦了,于是笔者去?了一下,发现不同列名也是可以合并的!!!
编辑:骆栢维
校审:梁晓杰