R语言学习

1基本命令

getwd(), setwd()  # 查看及改变工作目录
dev.off(), dev.new()  #图形设备关闭,新建
rm(list = ls())  #删除所有的对象
a=1:10, dim(a)=c(2,5), View(a)  #设置变量a为2行5列
is.matrix(a)  #判断数据类型
as.data.frame(a)  #转换数据类型
str(a)  #查看数据结构
d=options(), length(d), e=d$repos  # $为取d的repos
as.numeric(unlist(lapply(d, length)))  #lapply函数遍历列表向量内的每个元素,并且使用指定函数来对其元素进行处理。返回列表向量。unlist()函数将list结构的数据,变成非list的数据,即将list数据变成字符串向量或者数字向量的形式。as.numeric转变为数值结构
table(as.numeric(unlist(lapply(d, length))) > 2)  #table函数统计频数,统计数值大于2的频数。
index1=as.numeric(unlist(lapply(d, length))) > 2  #设置index1为列表里数值大于2的
d=d[index1]  #只取数值大于2的
d[2]  #数值大于2的元素中的第二个元素
d[[2]][1] #数值大于2的元素中的第二个元素的第一个元素,注意2外面有两个括号
b[1,4], b[c(T,F),4] #b共2行5列,b的第1行第4列的两种表示方法,T表示取,F表示不取
b[,3]  #b的第3列

2 外部数据导入导出

a=read.table('SraRunTable.txt', sep = '\t', header = T)  #sep设置列的分隔符为空格,header表头

b=read.table('GSE17215_series_matrix.txt', comment.char = '!', sep = '\t', header = T)  #comment.char指定注释符号,有!的行不被读入。

write.csv(b,'GSE17215_series_matrix.csv', row.names = F)  #把b导出为csv文件,' '为重命名,row.names=F把行名去掉

rownames(b)=b[,1]  #把b的第一列作为行名
b=b[, -1]  #去除b的第一列,-1
b=log2(b)  #对b去log2值
save(b,file = 'b_input.Rdata')  #保存b为b_input.Rdata,所有操作都会保存,方便下次读取及传递给别人
load(file = 'b_input.Rdata')  #重新载入b_input.Rdata

3 中级变量操作

a=read.table('SraRunTable.txt', sep = '\t', header = T)  
sort(a$MBases, decreasing = T)[1]  #将a按MBases列排序,取第一个值,decreasing降序
max(a$MBases)  #MBases列的最大值
min(a$MBases)
fivenum(a$MBases)  #MBases列的最小值、下四分位数、中位数、上四分位数、最大值
b=a[a$MBases < 5000,]  # 取a的MBases列中小于5000的行
boxplot(a$MBases~a$Assay_Type)  #箱线图,类别型变量a$Assay_Type,a的Assay_Type列,数值型变量a$MBases
table(a$Assay_Type)  #查看Assay_Type中的变量及其数量
wes=a[a$Assay_Type == 'WXS',]  # ==,两个等于号表示判断,一个等于号表示赋值,取a中Assay_Type为WXS的行
rna=a[a$Assay_Type == 'RNA-Seq',]  #取a中Assay_Type为RNA-Seq的行
b=grep('RNA-Seq', a$Assay_Type)
c=a[b,]  #与上等效
fivenum(wes$MBases)
fivenum(rna$MBases)  #分别查看rna和wes的四分位数,以便设置阈值


b=read.table('GSE17215_series_matrix.txt', comment.char = '!', sep = '\t', header = T)
str(b[1,])  #查看b的第一行的结构,为数据框 data.frame
as.numeric(b[1,])  #把b[1,]转换为数值
mean(as.numeric(b[1,]))  #求一行的平均值
head(rowMeans(b))  #rowMeans 求所有行的平均值,head显示前几行
for (i in 1:nrow(b)) {
  print(mean(as.numeric(b[i,])))
}  # for循环求每一行的平均值
apply(b, 1, function(x){
mean(x)
})  #apply函数一般针对矩阵或数据框,遍历b,1表示行,对列处理用2表示
apply(b, 1, mean)  #与上等效
rowMax=function(x){
  apply(x, 1, max)
}  #创造一个求每行最大值的函数rowMax
rowMax(b)
for (i in 1:nrow(z)) {
  x=as.numeric(z[i,])
  y=x[1]+x[2]-x[3]+x[4]-x[5]+x[6]
  print(y)
}  #循环求y值,对向量取元素直接坐标,对dataframe取元素逗号左边为行,逗号右边为列(list一样)
ji = function(z){
  for (i in 1:nrow(z)) {
    x=as.numeric(z[i,])
    y=x[1]+x[2]-x[3]+x[4]-x[5]+x[6]
    print(y)
  }
}  #创造一个求y值的ji函数
ji(b)

sort(apply(b, 1, sd), decreasing = T)[1:50]  #求每行的标准差,求值最高的前50行
。用sort先按降序 排序,再取前50
names(sort(apply(b, 1, sd), decreasing = T)[1:50])  #names可以得出相应的行名
sample(1:nrow(b), 50)  #随机取50个

4 热图

a1=rnorm(100)
dim(a1)=c(5,20)
pheatmap(a1)
a2=rnorm(100)+2
dim(a2)=c(5,20)
pheatmap(a2)
pheatmap(cbind(a1,a2), cluster_cols = F )  #cbind按列合并对象,rbind为按行合并。按照单一方向聚类,cluster_cols = F 按列 聚类关闭。
b=cbind(a1,a2)
b=as.data.frame(b)  #把b换为数据框格式
names(b)=c(paste('a1',1:20,sep='_'),paste('a2',1:20,sep='_'))  #给b中的列赋名。row.names可以给数据库中的行赋名。paste('a1',1:20,sep='_')把a1跟1到20的数字分别连接起来,间隔为_。
tmp=data.frame(group=c(rep('a1',20),rep('a2',20)))  #添加了新变量group
rownames(tmp)=colnames(b)  #一定要设置tmp的行名为b的列名
pheatmap(b,annotation_col = tmp)  #添加注释信息
?pheatmap 可以看到pheatmap的帮助文档,最下面有example的代码,可以详细的试一下每个参数的功能。
在矩阵中,只能保留一种数据类型,但在data.frame中可以保留多种数据类型

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

n=t(scale(t(dat[cg,])))  ##均一化(normalization)调整差异过大的数,用t函数转置再scale再用t函数转置回来。
n[n>2]=2#设置大于二的值均等于二
n[n<-2]=-2#设置小于负二的值均等于负二

6 id转换

strsplit('EN003.13','[.]')[[1]][1] #以点号.分隔开取第一个元素即EN003
library(stringr)   #载入stringr包,处理文本
str_split(a$V1,'[.]',simplify = T)[,1]  #用str_split()函数,simplify=T返回值为字符型矩阵,F返回为字符型向量,[,1]取第一列

library(org.Hs.eg.db)#加载org.Hs.eg.db包,包含了注释信息
toTable()#org.Hs.eg.db包规定读入数据用toTable
g2s=toTable(org.Hs.egSYMBOL)
g2e=toTable(org.Hs.egENSEMBL)
b=merge(a,g2e, by='ensembl_id', all.x=T)  #把两个数据框a和g2e,按照共有的ensembl_id列合并(关联)起来,all.x=T保留没有关联上的元素,即有的元素没有相同的列名
d=merge(b,g2s, by='gene_id', all.x=T)  #把a和g2e关联后的数据框b,再和g2s合并

table(table(d$ensembl_id)>1)  #统计数据框d中ensembl_id列内频率大于1的元素的数目
table(d$ensembl_id)[table(d$ensembl_id)>1]  #查看数据框d中ensembl_id列内频率大于1的元素

d=d[!duplicated(d$V1),]  #对d的V1列内重复的行去重
d=d[match(a$V1, d$V2),]  #把a中的顺序,放到d这边来。使d按照数据框a的顺序。

7和8

a=read.table('*.csv',header = T,sep = ',',fill = T)  #fill=T读取不规则的数据
library(ggbetweenstats)  
ggbetweenstats(data=a,x='Group',y='Expression') #横坐标按group列,纵坐标按Expression列

colnames(a)=c('id','stage','gene','mut')  #设置列名

9 表达矩阵的样本的相关性

cor(1:10,1:10)  #cor常用于计算两组数据之间的皮尔森 相关系数
a=rnorm(10)
b=10*a+rnorm(10)  #b相当于a的10倍,后面加的rnorm(10)相比只是噪音,所以a和b的相关性很高。
cor(a,b)  #算a和b的相关性

if (!requireNamespace("BiocManager"))
    install.packages("BiocManager")   #安装BiocManager
if (!requireNamespace("BiocManager", quietly = TRUE))
  install.packages("BiocManager")
BiocManager::install("airway", version = "3.8")   #安装Bioconductor的airway包R版本3.5之后,Bioconductor的包,需要先安装BiocManager,再用BiocManager来安装Bioconductor的包
data(airway)  #载入airway的数据,Bioconductor三个包:airway(数据包),Annotatiobdbi(注释包)和GenomicFeatures(功能函数包)
exprSet=assay(airway)  #assay,把airway的数据,转换成矩阵matrix
dim(exprSet)  #dim函数查看矩阵的维度情况
colnames(exprSet) 
cor(exprSet[,1],exprSet[,2])
cor(exprSet)  #对所有的列求相关性
pheatmap(cor(exprSet))
group_list=colData(airway)[,3]  #为热图加注释
tmp=data.frame(g=group_list)  #分组并转为一个数据框
rownames(tmp)=colnames(exprSet)  #有多少列不重要,必须保证注释信息的行名等于数据框的列名
pheatmap(cor(exprSet),annotation_col = tmp)

筛选数据,如果一个基因的表达量大于1的样本数少于5,去掉这个基因

x= exprSet[1,]  #以数据框的第一行即第一个基因做示范
table(x>1)  #可以用table统计表达量大于1的数目,更好的方法是用sum
true=1,false=0  #判断结果 true等价于1,false等价于0
sum(x>1)>5  #总数大于5,即表示有五个true
apply(exprSet, 1, function(x) sum(x>1) >5)  #遍历数据框的每一行,判断是否满足表达量大于1的样本数大于5
exprSet=exprSet[apply(exprSet, 1, function(x) sum(x>1) >5),]  #把符合条件的提取出来
##继续筛选
exprSet=log(edgeR::cpm(exprSet)+1)  # edgeR::cpm()函数去除文库大小差异
names(sort(apply(exprSet,1,mad),decreasing = T)[1:500])  #mad为求中位数绝对偏差,降序排序后取前500个的行名
exprSet=exprSet[names(sort(apply(exprSet,1,mad),decreasing = T)[1:500]),]  #把上一步的前500个行名的行提取出来
M=cor(log2(exprSet+1))  #再做相关性,就体现出来了差别
tmp=data.frame(g=group_list)
rownames(tmp)=colnames(M)
pheatmap(M, annotation_col = tmp)

你可能感兴趣的:(R语言学习)