我写了一个R包,简化芯片的差异分析
时间:2022-07-25
本文章向大家介绍我写了一个R包,简化芯片的差异分析,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
近期由于工作需要,有大批的芯片数据等着我分析。我想着简化一下代码,一步到位出来差异分析结果。配合练习写R包,今天算是搞定了大头,分享一下给有缘人使用~
目前差异分析仅支持二分组数据,多分组的后面再说~
2.R包安装和准备
我的包托管在Github上,并且依赖了曾老板写的AnnoProbe包,他的包也在github,所以没办法自动帮你安装,需要先安装好哦。
/分割的是用户名和包名,知道了用户名,你就可以在github上搜索到包对应的页面啦。
if(!require(AnnoProbe))devtools::install_github("jmzeng1314/AnnoProbe")
if(!require(tinyarray))devtools::install_github("xjsun1221/tinyarray")
github的包安装需要多折腾,实在折腾不了就放弃吧。如果仅仅是网络问题,可以使用本地安装,到github上下载这个包,下来放在工作目录下,然后:
#devtools::install_local("tinyarray-master.zip",upgrade = F)
只要有一些R包安装的基础知识和解决报错能力,就可以搞定啦。
library(stringr)
library(AnnoProbe)
library(tinyarray)
3.GEO数据下载
rm(list = ls())
options(stringsAsFactors = F)
gse = "GSE4107"
geo = geo_download(gse)
写成了一个函数geo_download,默认使用AnnoProbe下载,如果报错就说明这个GSE没有被AnnoProbe收录,可以
geo = geo_download(gse,by_annopbrobe = F)
就会使用GEOquery下载了,如果网速实在堪忧,可以去GEO下载matrix.gz文件,放在工作目录下。
4.得到表达矩阵和分组信息
geo$exp = log(geo$exp+1)
group_list = ifelse(str_detect(geo$pd$title,"control"),"control","treat")
group_list = factor(group_list,levels = c("control","treat"))
5.找探针注释信息
结合两个来源,一个是bioconductor的包,一个是idmap。find_anno会返回可用的命令,复制下来运行即可。
find_anno(geo$gpl)
## [1] "`ids <- toTable(hgu133plus2SYMBOL)` or `ids <- AnnoProbe::idmap('GPL570')` is both avaliable"
ids <- AnnoProbe::idmap('GPL570')
6. 完成差异分析及可视化
把很多代码集成到了一起,得到的dcp是一个列表里面包括了差异分析结果表格,差异基因以及三张图。
dcp = get_deg_all(geo$exp,
group_list,
ids,
logFC_cutoff = 1,
scale_before = T,
cluster_cols = F)
## [1] "362 down genes,1361 up genes"
head(dcp[[1]])
## logFC AveExpr t P.Value adj.P.Val B probe_id
## 1 4.755775 5.433371 15.686305 9.489229e-14 2.091036e-09 19.58011 202768_at
## 2 3.617970 7.889055 15.545324 1.147345e-13 2.091036e-09 19.43798 209189_at
## 3 2.808211 7.686054 14.835515 3.051878e-13 3.595391e-09 18.69553 201694_s_at
## 4 1.700875 9.251381 11.538846 5.019678e-11 3.920727e-07 14.57411 201041_s_at
## 5 3.146005 5.175579 10.617313 2.533831e-10 1.731715e-06 13.19062 223316_at
## 6 3.482923 4.763760 9.961547 8.508265e-10 4.651894e-06 12.13533 220276_at
## symbol change ENTREZID
## 1 FOSB up 2354
## 2 FOS up 2353
## 3 EGR1 up 1958
## 4 DUSP1 up 1843
## 5 CCDC3 up 83643
## 6 RERGL up 79785
str(dcp[[2]])
## List of 2
## $ upgenes : chr [1:1361] "FOSB" "FOS" "EGR1" "DUSP1" ...
## $ downgenes: chr [1:362] "NR1H4" "SLC51A" "NETO2" "ETNK1" ...
dcp[[3]]
- Hibernate的缓存机制
- error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http:/
- 【Go 语言 redis内存数据库存储 demo】
- linux下基本操作记录mongodb
- ClassLoader究竟为何物?
- Oracle应用实战八(完结)——存储过程、函数+对象曹组
- 动态代理模式原理
- SQL可以正常用,但cmd启动不了mysql,报错[ERROR] unknown variable ;basedir=....问题
- Percona-toolkit的安装和配置(r8笔记第86天)
- 分布式服务框架 Zookeeper
- python--类方法、对象方法、静态方法
- Go语言内存分配器的实现
- Go 语言 数据库操作之链接数据库实现
- 对于tnsping的连接超时的功能补充(r9笔记第3天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 资深程序员带你解锁Android性能优化五大误区和两大疑点!(附333页性能优化PDF宝典)
- Android大三提前批的钉钉和抖音面筋,阿里挂了HR面,抖音通过收获Offer
- leetcode之键盘行
- 浅析centos 7 自带的 php 5.4升级为 5.6的方法
- Linux内核设备驱动地址映射笔记整理
- Linux中的who命令实例介绍
- Linux十个新手命令分享
- Linux 内核通用链表学习小结
- 从零开始针对 .NET 应用的 DevOps 运营实践 - 运行环境搭建
- 面试问我,创建多少个线程合适?我该怎么说
- C语言链表实例--玩转链表
- 帝国CMS怎么利用灵动标签循环调用多个栏目下的文章
- PHP 加密 Password Hashing API基础知识点
- php libevent 功能与使用方法详解
- 对Python3中bytes和HexStr之间的转换详解