1、首先是软件和R package安装:
rm(list = ls())
options()$repos
options()$BioC_mirror
options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
options()$repos
options()$BioC_mirror
以上都是镜像设置相关操作,其中的ustc.edu
是设置成中科大镜像,下面的tuna.tsinghua.edu.cns
是设置成清华镜像,之所以要设置镜像,是因为直接从CRAN
下载R包可能速度较慢。同样的,当一个R包安装不顺利的时候,也可以考虑换个镜像去安装。
关于镜像设置,其实鼠标操作更简单:
Tools>Global Options>Packages>Change,选择中国国内镜像,一共有6个可选,一般清华的是最稳定的。
这里顺便说一下R 包安装的三种方式,
(1)从CRAN安装库:
install.packages("BiocManager")
也可以从Rstudio界面用鼠标点击下载,效果是一样的,如图:
(2)从Bioconductor安装:
(!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("biomaRt", version = "3.8")#安装biomaRt
(3)github上R包安装:
devtools::install_github("ggrothendieck/sqldf")#如果没有devtools需要先安装devtools,如下:
install.packages("devtools")
library(devtools)
大部分包我都已经安装过,只有2个需要安装:
library("FactoMineR")
library("factoextra")
library(GSEABase)
library(GSVA)
BiocManager::install('GSVA')
library(clusterProfiler)
library(genefu)#这个包不太好装,看网,win7比win10貌似好装点
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("genefu")
library(ggplot2)
library(ggpubr)
library(hgu133plus2.db)
library(limma)
library(org.Hs.eg.db)
library(pheatmap)
2、下面开始做题:
1、打开 Rstudio 告诉我它的工作目录。#告诉我在你打开的rstudio里面 getwd() 代码运行后返回的是什么?
getwd()
2、新建6个向量,基于不同的原子类型。(重点是字符串,数值,逻辑值)
a1<-c("a","b","c")
a2<-c(1:3)#数值型向量(integer)
a2_2<-c(2.1,4.2,5.5,6.7,9.3,10.6)#数值型向量(小数)
a3<-c("hello","R","nihao")#字符串向量
a4<- a1<a2#通过逻辑运算赋值逻辑型向量
a4_2 <- c(T,F,F,F,T,F)#直接赋值逻辑值向量
a5<-factor(c("stageI","stageII","stageIII"))
a6<-as.numeric(a2)+1
a7 <- c(1,2,3,"yes")#这里是看到别人这么写的,ps,向量不是只能有一种类型吗?
a8 <- rep('e',times=3)
a1
a2
a2_2
a3
a4
a4_2
a5
a6
a7
class(a8)
a8
3、新建一些数据结构,比如矩阵,数组,数据框,列表等重点是数据框,矩阵)
b1<-matrix(LETTERS[1:24],nrow=4,ncol = 6)
b1
b1_1<- matrix(data=c(1:20),nrow=4,ncol=5)
b1_1
b2<-data.frame(a1,a2)
b2
b3<-matrix(1:10,nrow=5)
b3
b3_0<-c(rep(a1,2),rep(a2,2))
b3_0
b3<-as.data.frame(matrix(b3_0,ncol = 6))
b3
b4<-matrix(rep(c(a1,a2),3),nrow=3,byrow = F)
b4
b5 <- list(Name <- c("Liming","Xiaofang","Xiaohong","Lihua","Shanshan"),Gender <- c("M","F","M","M"),score <- matrix(1:12,3,4))
b5 #创建列表
4、在你新建的数据框进行切片操作,比如首先取第1,3行, 然后取第4,6列
b1
b1[1,3]
b1[,c(4,6)]#通过位置索引
colnames(b1)<-c(1:6)
b1
b1[,colnames(b1)>3&colnames(b1)!=5]#通过逻辑值索引
dim(b1)
tmp1 <- c(T,F,T,F)
tmp2 <- c(F,F,F,T,F,T)
b1[tmp1,tmp2]#通过逻辑值索引
colnames(b1)<-paste0("col_",c(1:6))
b1
b1[,c("col_4","col_6")]#通过名字索引
b1
5、使用data函数来加载R内置数据集 rivers 描述它。并且可以查看更多的R语言内置的数据集:
R语言系列:探索R自带数据包(这里列举的是可能会用到和遇到的数据,包括一些以前见过的数据包)"https://mp.weixin.qq.com/s/dZPbCXccTzuj0KkOL7R31g
data(rivers)
head(rivers)
rivers
data(euro)#欧元汇率,长度为11,每个元素都有命名
euro
data(mtcars)#32辆汽车在11个指标上的数据
data(esoph) ##法国的一个食管癌病例对照研究
esoph
data(iris) # #3种鸢尾花形态数据
data(longley) #强共线性的宏观经济数据
data(LifeCycleSavings) #50个国家的存款率
data(PlantGrowth) #三种处理方式对植物产量的影响
data(quakes) #1000次地震观测数据(震级>4)
data(sleep) #两药物的催眠效果
data(ToothGrowth) #VC剂量和摄入方式对豚鼠牙齿的影响
data(ChickWeight) #饮食对鸡生长的影响
data(CO2) #耐寒植物CO2摄取的差异
data(Indometh) #某药物的药物动力学数据
data(Theoph) #茶碱药动学数据
#时间序列数据
data(ldeaths) #1974-1979年英国每月支气管炎、肺气肿和哮喘的死亡率
data(fdeaths) #前述死亡率的女性部分
data(mdeaths) #前述死亡率的男性部分
data(USAccDeaths) #1973-1978美国每月意外死亡人数
data(EuStockMarkets) #多变量时间序列。欧洲股市四个主要指标的每个工作日记录,共1860条记录
6、下载 https://www.ncbi.nlm.nih.gov/sra?term=SRP133642 里面的 RunInfo Table 文件读入到R里面,了解这个数据框,多少列,每一列都是什么属性的元素。(参考B站生信小技巧获取runinfo table) 这是一个单细胞转录组项目的数据,共768个细胞,如果你找不到RunInfo Table 文件,可以点击下载,然后读入你的R里面也可以。
下载方法,NCBI---SRA---搜索SRP133642,点击“Send results to Run selector",进来后再点击”RunInfo Table“即可下载。
sra<-read.table('SraRunTable.txt',header = T,sep = '\t')
dim(sra)
str(sra)
colnames(sra)
7、下载 https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE111229 里面的样本信息sample.csv读入到R里面,了解这个数据框,多少列,每一列都是什么属性的元素。(参考 https://mp.weixin.qq.com/s/fbHMNXOdwiQX5BAlci8brA 获取样本信息sample.csv)如果你实在是找不到样本信息文件sample.csv,也可以点击下载。
下载sample.csv:下载并保存GEO数据(第一次下载失败,第二次成功)
library(GEOquery)
GSE_name = 'GSE111229'
options( 'download.file.method.GEOquery' = 'libcurl' ) #windows系统
gset <- getGEO( 'GSE111229', destdir = '.',getGPL = F )
save( gset, file = 'gset.Rdata' ) #掌握保存和加载Rdata的命令
由于gset是列表,故将其转为可操作的数据结构Gset
load("gset.Rdata")
Gset <- gset[[1]]
用GEOquery里的pdata函数获取样本信息
看一下pdata的结构,很明显是数据框
pdata<-pData(Gset)
dim(pdata)#766行,47列,发现比手动下载的列数多
#dim查看行列 colnames查看列名
手动下载,载入数据https://www.ncbi.nlm.nih.gov/geo/browse/
两种方法都可以,这里我用的是手动下载的数据
sample<-read.csv('sample.csv',header = T,sep = ',')
head(sample)
class(sample)
View(sample)
dim(sample)
colnames(sample)
8、把前面两个步骤的两个表(RunInfo Table 文件,样本信息sample.csv)关联起来,使用merge函数。
sra_merge<-merge(sra,sample,by.x='Sample_Name',by.y='Accession')
对前面读取的 RunInfo Table 文件在R里面探索其MBases列,包括 箱线图(boxplot)和五分位数(fivenum),还有频数图(hist),以及密度图(density) 。
boxplot(sra$MBases)
fivenum(sra$MBases)
hist(sra$MBases)
plot(density(sra$MBases))
9、把前面读取的样本信息表格的样本名字根据下划线分割看第3列元素的统计情况。第三列代表该样本所在的plate, 根据plate把关联到的 RunInfo Table 信息的MBases列分组检验是否有统计学显著的差异
sample
head(sra_merge)
sra1<-sra_merge[,c("MBases","Title")]
head(sra1)
save(sra1,file = 'input.Rdata')
load(file = 'input.Rdata')
class(sra1)
str(sra1)
sra1$Title=as.character(sra1$Title)
sra1
strsplit(sra1$Title,"_")[[1]][3]
sra1
plate <- unlist(lapply(sra1$Title,function(x)
{ x
strsplit(x,'_')[[1]][3]
}))
table(plate)
class(plate)
head(plate)
str(plate)
10、根据plate把关联到的 RunInfo Table 信息的MBases列分组检验是否有统计学显著的差异。
sra1$plate<-plate
head(sra1)
t.test(sra1[,1] ~ plate)
[1] t = 2.3019, df = 728.18, p-value = 0.02162。有显著差异。
11、分组绘制箱线图(boxplot),频数图(hist),以及密度图(density) 。
其实基础作图都可以不用花费太多时间去学习,练练玩玩即可,大部分功能都可以用ggplot来解决。
sra1$plate<-as.factor(plate)
sra1$plate<-as.numeric(plate)#这两个变量类型的转化需根据后面分组作图的要求确定要不要运行。
str(sra1$plate)
hist(sra1[,1],main='boxplot',freq = F, breaks = "sturges")
boxplot(sra1[,1]~plate)
plate0 <- sra1[,c("MBases","plate")]
plate1 <- plate0[1:384,1]
hist(plate1) #此步为0048的频数图
plate2<- plate0[385:768,1]
hist(plate2) #此步为0049的频数图
density(plate1)
plot(density(plate1)) #此步为0048的密度图
plot(density(plate2)) #*此步为0049的密度图#这里的plate1和plate2赋值原先没有想到,感觉稍微麻烦了点,暂时没想到更好的办法进行分组作图,当然boxplot不需要赋值即可进行分组。*
12、使用ggplot2把上面的图进行重新绘制。
library(ggplot2)
colnames(sra1)
ggplot(sra1,aes(x=plate,y=MBases))+geom_boxplot()+theme_classic()#我喜欢用这个主题,背景比较干净
频数图:柱状图和直方图是很类似的,只是柱状图更适合画分类变量,
直方图更适合把连续型的数据按照一个个等长的分区(bin)来切分,然后计数,画柱状图。
sra1$plate<-as.factor(plate)
ggplot(sra1,aes(x=MBases,fill=plate))+geom_histogram()#与下面一句等价
ggplot(sra1)+geom_histogram(aes(x=MBases,fill=plate))#直方图最容易,提供一个变量x,画出数据分布,并可以根据其他变量给他填充颜色。
ggplot(sra1)+geom_histogram(aes(x=MBases,fill=plate),position = "dodge")#并列排列
ggplot(sra1)+geom_histogram(aes(x=MBases,fill=plate),position = "fill")#使用position="fill",按照相对比例来画
画成柱状图是这个样子:
ggplot(sra1)+geom_bar(aes(x=MBases,y=1), stat="identity")#通过stat参数,可以让geom_bar按指定高度画图
密度图
ggplot(sra1,aes(x=MBases,fill=plate))+geom_density()
ggplot(sra1)+geom_density(aes(x=MBases, colour=plate,fill=plate))#color指定线条颜色,fill指定图片颜色填充
其他人的答案(boxplot一样):(此时需要先把plate转换为numeric变量)
sra1$plate<-as.numeric(plate)
ggplot(sra1,aes(x=plate,y=MBases))+geom_histogram() #geom_histogram() 不完整,会报错,需要把()内的部分填充
plate1 <- as.data.frame(plate1)
plate2 <- as.data.frame(plate2) #必须转化成数据框才可以作图,先以plate1为例,colname为plate1,其实这里是全部0048的MBases
colnames(plate1)="MBases"
colnames(plate2)="MBases"
ggplot(plate1,aes(x=MBases))+geom_histogram(bins = 60,binwidth=0.01,color="blue")
ggplot(plate1,aes(x=MBases))+geom_histogram(bins = 30,color="blue")
可以前后对比,发现前后差别。
ggplot(plate2,aes(x=MBases))+geom_histogram(bins = 60,binwidth=0.01,color="blue")
ggplot(plate2,aes(x=MBases))+geom_histogram(bins = 30,color="blue")
密度图
ggplot(plate1,aes(x=MBases))+geom_density()
ggplot(plate2,aes(x=MBases))+geom_density()
13、使用ggpubr把上面的图进行重新绘制。
ggpubr号称专做出版级的图,确实做出来比较好看。
library(ggpubr)
#boxplot:
p <- ggboxplot(sra1, x="plate", y="MBases", color = "plate",
palette = c("#00AFBB", "#E7B800", "#FC4E07"),
add = "jitter", shape="plate")#增加了jitter点,点shape由plate映射
p
#换个颜色(别人答案)
p <- ggboxplot(sra1, x = "plate", y = "MBases",
color = "plate", palette = "jco",
add = "jitter")
# Add p-value
p + stat_compare_means(method = 't.test')
#再换个颜色
ggboxplot(sra1, x="plate", y="MBases", color = "plate",
palette = "aaas",add = "jitter") + stat_compare_means(method = "t.test")
#箱线图+分组形状+统计:
my_comparisons <- list(c("0.5", "1"))
p+stat_compare_means(comparisons = my_comparisons)+ #不同组间的比较
stat_compare_means(label.y = 60)
#内有箱线图的小提琴图+星标记:
ggviolin(sra1, x="plate", y="MBases", fill = "plate",
palette = c("#00AFBB", "#E7B800", "#FC4E07"),
add = "boxplot", add.params = list(fill="white"))+
stat_compare_means(comparisons = my_comparisons, label = "p.signif")+#label这里表示选择显著性标记(星号)
stat_compare_means(label.y = 50)
#直方图:
sra1$plate<-as.factor(plate)
gghistogram(sra1, x="MBases", fill = "plate",palette = c("#f4424e", "#41a6f4"))
gghistogram(sra1, x="MBases", add = "mean", rug = TRUE, color = "plate", fill = "plate",
palette = c("#00AFBB", "#E7B800"))#带有均值线和边际地毯线的直方图
#密度图:
ggdensity(sra1, x="MBases", fill = "plate", color = "plate", add = "mean",palette = c("#f4424e", "#41a6f4"))
ggdensity(sra1, x="MBases", add = "mean", rug = TRUE, color = "plate", fill = "plate",
palette = c("#00AFBB", "#E7B800"))#带有均值线和地毯线的密度图
其他人:
hist_0048
ggplot(plate0,aes(x=MBases))+geom_histogram(bins = 40,binwidth=0.01,color="blue")
14、随机取384个MBases信息,跟前面的两个plate的信息组合成新的数据框,第一列是分组,第二列是MBases,总共是384*3行数据。
这个题目没太明白意思,主要是练习sample随机取样函数的用法。
col_4<-sample(nrow(sra1), 384)#用到随机抽样函数sample
col_4<-sample(sra1$MBases,384)
sra1$col_4<-col_4
head(sra1)
sra1<-sra1[,c(3,1,4,2)]
sra1
别人的答案一:https://blog.csdn.net/weixin_34240520/article/details/91199550
sra2 <- sample(nrow(sra1), 384)
class(sra2)
sra3 <- sra1[sra2,][, c(3, 2, 1)]
dim(sra3)
别人的答案二:https://www.jianshu.com/p/448ec60bdd4a
data <- sra1[sample(nrow(sra1),384),]
data <- data[,c(3,2,4,1)]
str(data)
dim(data)
merge一般都是都是有相同的列或者行才会用的。
plate3 <- sample(1:nrow(sra1),384)
colnames(plate1) <- "MBases_0048"
colnames(plate2) <- "MBases_0049"
data1 <- data.frame(plate2,plate1)
data2 <- data.frame(plate3,data1)