R函数不会写,"抄"总会吧!
前面我们简单的介绍了R函数。有些人可能会说,我现在的R水平有限,还不足以写出很高级的函数,该怎么办?俗话说前人栽树后人乘凉,他山之石可以攻玉,鲁迅同志也提出过“拿来”主义。已经有前人,高手写出了很多很实用,很强大的R函数,你直接拿来用就可以了。如果你很好学,也可以把人家的函数源代码拿来学习,其实这也是一种学习R的很好的方法。你如果完全读懂了原作者的函数,你还可以稍作修改用作他用,甚至可以让这个函数功能更加强大。
下面给大家举个具体的例子,火山图大家可能都不陌生,是一种展示差异表达分析结果的常用可视化方式。
在R的GDCRNATools包中就内置了一个专门画火山图的函数,叫做gdcVolcanoPlot。我们有两种方法可以获取这个函数的源代码。
1.通过下面的链接来获取gdcVolcanoPlot的源代码
https://rdrr.io/bioc/GDCRNATools/src/R/gdcDEGVisulization.R
2.从Bioconductor官网上去下载这个R包的所有源代码,
http://www.bioconductor.org/packages/release/bioc/html/GDCRNATools.html
注意一定要下载tar.gz格式的文件。.zip格式的文件是windows系统下的R安装包,都是已经编译过的,你是无法看到源代码的。
解压之后你就看到所有函数的源代码
我们要找的gdcVolcanoPlot的源代码就在gdcDEGVisulization.R这个文件中。
我们照"抄"gdcVolcanoPlot这个函数,接下来我们就可以用这个函数来绘制火山图了。
gdcVolcanoPlot<-function (deg.all, fc = 2, pval = 0.01)
{
geneList <- deg.all
geneList$threshold <- c()
geneList$threshold[geneList$logFC > log(fc, 2) & geneList$FDR <
pval] <- 1
geneList$threshold[geneList$logFC >= -log(fc, 2) & geneList$logFC <=
log(fc, 2) | geneList$FDR >= pval] <- 2
geneList$threshold[geneList$logFC < -log(fc, 2) & geneList$FDR <
pval] <- 3
geneList$threshold <- as.factor(geneList$threshold)
lim <- max(max(geneList$logFC), abs(min(geneList$logFC))) +
0.5
volcano <- ggplot(data = geneList, aes(x = logFC,
y = -log10(FDR)))
volcano + geom_point(aes(color = threshold), alpha = 1,
size = 0.8) + xlab("log2(Fold Change)") + ylab("-log10(FDR)") +
scale_colour_manual(values = c("red", "black", "green3")) + xlim(c(-lim, lim)) +
geom_vline(xintercept = c(-log(fc, 2), log(fc, 2)), color = "darkgreen",
linetype = 3) + geom_hline(yintercept = -log(pval,
10), color = "darkgreen", linetype = 3) + theme_bw() +
theme(axis.line = element_line(colour = "black"),
panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.border = element_rect(colour = "black"),
panel.background = element_blank()) + theme(legend.position = "none") +
theme(axis.text = element_text(size = 14), axis.title = element_text(size = 16))
}
接下来我们来画火山图,数据是从DEGAll.rda这个文件中来,具体如何生成这个文件和如何使用这个文件可以参考R的save,load函数和 .rda文件。加载之后你就会有DEGall这个变量了,里面存放的是差异表达分析之后的结果。画火山图需要用到logFC,FDR。
load("DEGAll.rda")
#这里用到ggplot2这个包来画图
library(ggplot2)
gdcVolcanoPlot(DEGAll)
你就会得到下面这张火山图,是不是很方便,不会写函数一样可以画火山图。
关注公众号,后台回复"火山图",获取DEGAll.rda文件。
Reference:
2.R函数
- 全能型反汇编引擎 – Capstone-Engine
- Hijack攻击揭秘
- 都在说微服务,那么微服务的反模式和陷阱是什么(二)
- Spring Boot 2.0 - WebFlux framework
- Spring Cloud构建微服务架构:服务网关(路由配置)【Dalston版】
- SpringCloud实战小贴士:Zuul的路径匹配
- 程序员你为什么这么累【续】:编码习惯之参数校验和国际化规范
- 程序员你为什么这么累【续】:编码习惯-函数编写建议
- 那些年,我们一起碰到过的骗局
- Spring Security (五) 动手实现一个IP_Login
- 史上最全Linux提权后获取敏感信息方法
- Spring Security (四) 核心过滤器源码分析
- Spring Security (三) 核心配置解读
- Spring Cloud配置中心获取不到最新配置信息的问题
- 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 数组属性和方法
- Cypress系列(63)- 使用 Custom Commands
- Python字符串操作大全
- Cypress系列(64)- 数据驱动策略
- 别只会搜日志了,求你懂点原理吧
- Cypress系列(65)- 测试运行失败自动重试
- CentOS7下编译FFMPEG源代码
- Android 的 Presentation 双屏异显,遇到的问题总结
- 音视频相关开发库和资料
- Flink深入浅出: 应用部署与原理图解(v1.11)
- 用 Github Actions 在 K8S 中运行 CI 测试
- 线程池的拒绝策略
- 15 张图带你深入理解浮点数
- 用Python实现坦克大战游戏 | 干货贴
- hexo搭建个人网站博客完全教程
- 快速入门 Python 数据库操作