R语言实验课(生信)(附代码)

实验课2

问题描述:

编程思想:

本次实验课主要采取apply()函数、which.max()、order()排序等常用函数的调用和功能

apply函数的结构是apply(X,MARGIN,FUN,…)

这里:

  • X是指我们将对其应用操作的数据集(在本例中是矩阵)
  • MARGIN参数允许我们指定是按行还是按列应用操作
  • 行边距=1
  • 列边距=2
  • FUN指的是我们想要在X上“应用”的任何用户定义或内置函数

 让我们看看计算每行平均数、每列之和以及全部的平方的简单示例:

X<-sample((1:10),20, replace = T)
data <- matrix(X,nrow = 5 , ncol = 4)
data
meanrows <- apply(data, 1, mean)
meanrows
sumcols <- apply(data, 2, sum)
sumcols
allsqrt <- apply(data, 1:2, sqrt)
allsqrt

 R语言代码描述

set.seed(1)#设置随机种子
#按照正态分布随机构建一个100*20的矩阵,并且保存小数点后两位小数
m1<-matrix(round(rnorm(2000),2),100,20)
#获取m1矩阵中均值最大的列的位置
which.max(apply(m1,2,mean))
#获取m1矩阵中方差最大的列的位置
which.max(apply(m1,2,var))
#求m1矩阵中的最大数值即获取行最大值和列最大值的位置
#which.max(apply(m1,1,max))#获取m1矩阵中行的最大值的位置
#which.max(apply(m1,2,max))#获取m1矩阵中列的最大值的位置
m1[which.max(apply(m1,1,max)),which.max(apply(m1,2,max))]
#展示出m1矩阵中的最大数值的行和列的位置坐标
list(which.max(apply(m1,1,max)),which.max(apply(m1,2,max)))
#利用max()函数验证m1矩阵最大的数值是否相等
max(m1)
#储存m1矩阵,方便展示
m4<-m1
#求m1矩阵中的第二大数值即将m4矩阵的最大值赋予一个较小的值之后再同理求出最大值
m4[which.max(apply(m4,1,max)),which.max(apply(m4,2,max))]<-0
m4[which.max(apply(m4,1,max)),which.max(apply(m4,2,max))]
#展示出m4矩阵中的最大数值的行和列的位置坐标
list(which.max(apply(m4,1,max)),which.max(apply(m4,2,max)))
max(m4)
# #计算两列的相关性cor()可以直接实现,如果比较每两行的可以对矩阵进行转置再求相关性
# #Way1去求位置
# max(cor(m1)[which(lower.tri(cor(m1))==TRUE)])
# which(cor(m1)==max(cor(m1)[which(lower.tri(cor(m1))==TRUE)]))
# floor(which(cor(m1)==max(cor(m1)[which(lower.tri(cor(m1))==TRUE)]))[1]/20+1)
# which(cor(m1)==max(cor(m1)[which(lower.tri(cor(m1))==TRUE)]))[1]%%20
# arrayInd函数可以实现将向量坐标转化为矩阵坐标
#验证cor(m1)[9,19] #也可以使用cor(m1[,9],m1[,19])
#Way2去求位置
#由于后面需要多次对cor(m1)矩阵进行变动,方便起见可以设置两个对象m2和m3
#cor(m1)函数计算m1矩阵每两列之间的相关性
m2<-cor(m1)
#将m2的上三角矩阵(包括对角线上的元素给予0)
#lower.tri(cor(m1))==F表示上三角矩阵(包括对角线元素)
m2[which(lower.tri(cor(m1))==F)]<-0
#找到相关性最高的两对列
#求相关性最大的一对列的的值
m2[which.max(apply(m2,1,max)),which.max(apply(m2,2,max))]
#展现出相关性最大的一对列的列的行和列
list(which.max(apply(m2,1,max)),which.max(apply(m2,2,max)))
#验证
max(m2)
#求最大的一队列的中位数
m3<-cor(m1)
#将相关性最高的一对列从m3当中提取出来并组合在一起构成新的矩阵x1
x1<-cbind(m3[,which.max(apply(m2,1,max))],m3[,which.max(apply(m2,2,max))])
#计算矩阵x1每列的中位数
y1<-apply(x1,2,median)
#进行判断,根据列的中值进行判断,保留中值较大的那列,在原矩阵m1之中删除较小的一列
if(y1[1]>y1[2]){
  m1<-m1[,-which.max(apply(m2,2,max))]
}else{
  m1<-m1[,-which.max(apply(m2,1,max))]
}
#求相关性第二大的一对列的值
#将第二大的值赋予一个较小的数求第二大的值
m2[which.max(apply(m2,1,max)),which.max(apply(m2,2,max))]<-0
m2[which.max(apply(m1,1,max)),which.max(apply(m1,2,max))]
#展现出相关性第二大的一对列的列的行和列
list(which.max(apply(m2,1,max)),which.max(apply(m2,2,max)))
#验证
max(m2)
#求第二大一堆的列的中位数
#将相关性第二高的一对列从m3当中提取出来并组合在一起构成新的矩阵x2
x2<-cbind(m3[,which.max(apply(m2,1,max))],m3[,which.max(apply(m2,2,max))])
#计算矩阵x2每列的中位数
y2<-apply(x2,2,median)
#进行判断,根据列的中值进行判断,保留中值较大的那列,在原矩阵m1之中删除较小的一列
if(y2[1]>y2[2]){
  m1<-m1[,-which.max(apply(m2,2,max))]
}else{
  m1<-m1[,-which.max(apply(m2,1,max))]
}
#对m1矩阵的各行计算方差
z1<-apply(m1,1,var)
#对行的方差进行排序,去除方差最小的5行
m1<-m1[order(z1,decreasing = F)[-(1:5)],]
m1

结果展示:

最终生成了一个95*18列的矩阵

 

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: GSEA(基因集富集分析)是一种常用的息学分析方法,用于研究基因集在基因表达谱中的富集情况。下面是使用R语言进行GSEA分析的代码示例: 1. 首先,需要安装和加载必要的R包,例如GSEA包和其他必要的依赖包。 ```R install.packages("GSEA") library(GSEA) ``` 2. 加载基因表达数据集,通常是一个包含基因表达矩阵的数据文件。假设文件名为"expression_data.txt",其中包含基因表达矩阵和对应的样本息。 ```R expression_matrix <- read.table("expression_data.txt", header = TRUE) ``` 3. 定义基因集,可以是预定义的基因集数据库(例如MSigDB)中的基因集,也可以是自定义的基因集。 ```R gene_sets <- c("GO_Biological_Process", "KEGG_Pathways", "Custom_Gene_Set") ``` 4. 进行GSEA分析,使用`gsea()`函数。其中,`gene_expr_matrix`参数为基因表达矩阵,`gene_sets`参数为基因集,`class_vector`参数为样本类别息向量。 ```R gsea_results <- gsea(gene_expr_matrix = expression_matrix, gene_sets = gene_sets, class_vector = sample_classes) ``` 5. 分析结果包括富集分数(Enrichment Score)、正负富集基因集和富集图谱等。可以通过可视化方法进一步探索和解释这些结果。 ```R enrichment_score <- gsea_results$es positive_sets <- gsea_results$pos_sets negative_sets <- gsea_results$neg_sets gene_set_plot <- plot(gsea_results) ``` 以上是使用R语言进行GSEA分析的基本代码示例。根据具体的研究问题和分析目标,还可以进行更多的数据预处理和可视化分析。 ### 回答2: GSEA(Gene Set Enrichment Analysis)是一种息学分析工具,可用于确定基因集在给定基因表达数据中的富集程度。下面是R语言中实现GSEA分析的示例代码。 首先,需要安装并加载GSEABase、clusterProfiler和enrichplot等相关的R包。 ```R install.packages("GSEABase") install.packages("clusterProfiler") install.packages("enrichplot") library(GSEABase) library(clusterProfiler) library(enrichplot) ``` 接下来,准备基因表达数据和基因集数据。假设基因表达数据保存在一个矩阵中,行表示基因,列表示样本;基因集数据保存在GMT格式文件中,每行包含一个基因集的名称、描述和基因列表。 ```R expression_data <- read.table("expression_data.txt", header = TRUE, row.names = 1) gmt_file <- system.file("extdata", "c2.cp.kegg.v7.4.symbols.gmt", package = "DOSE") gene_sets <- readGMT(gmt_file) ``` 然后,进行GSEA分析。可以选择使用差异表达基因列表作为输入,或者将基因表达数据与基因集数据一起传递。以下是基于基因表达数据进行GSEA分析的示例。 ```R gene_rank <- computeGeneRank(expression_data, method = "t.test") result <- enrichGSEA(gene_sets, gene_rank) ``` 最后,可以使用enrichplot包中的函数绘制GSEA结果的可视化,例如绘制富集图和基因集热图。 ```R dotplot(result, showCategory = 20) gene_heatmap(result, top = 10) ``` 通过这些代码,我们可以使用R语言实现GSEA分析,从而确定基因集在给定基因表达数据中的富集程度,并可视化展示分析结果。 ### 回答3: GSEA (基因集富集分析) 是一种用于分析物学实验数据的息学工具,它可以确定在给定条件下,特定基因集中的基因与实验结果相关性的显著性。下面是一个用R语言进行GSEA分析的代码示例: 1. 导入所需的R包。 ```R library(clusterProfiler) ``` 2. 导入基因表达数据。 ```R expression_data <- read.table("expression_data.txt", header = TRUE, sep = "\t") ``` 3. 根据实验分组息创建一个分组向量。 ```R group <- c(rep("Group A", 3), rep("Group B", 3)) ``` 4. 根据基因的符号名称创建一个基因符号向量。 ```R gene_symbols <- c("Gene1", "Gene2", "Gene3", "Gene4", "Gene5", "Gene6") ``` 5. 创建一个基因集对象。 ```R gene_set <- list( GroupA_genes = c("Gene1", "Gene2", "Gene3"), GroupB_genes = c("Gene4", "Gene5", "Gene6") ) ``` 6. 运行GSEA分析。 ```R gsea_result <- gseGO(expression_data, geneSet = gene_set, nPerm = 1000, minGSSize = 3, maxGSSize = 500, pvalueCutoff = 0.05) ``` 7. 查看GSEA结果。 ```R print(gsea_result) ``` 这段代码中,首先导入了clusterProfiler包,它包含了进行GSEA分析所需的函数。然后,基因表达数据被读入到一个名为expression_data的数据框中。接下来创建了一个分组向量,它指定了每个样品所属的实验组。然后,基因符号向量被创建,其中包含了基因的符号名称。根据实验息和基因符号,一个基因集对象被创建。最后,调用gseGO函数运行GSEA分析,其中包括参数,如基因集、置换次数、最小/最大基因集大小和显著性阈值。最后,打印GSEA分析的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值