R语言的繁荣背后何尝没有隐患
R语言的繁荣是毋庸置疑的,至少在科研界的地位蒸蒸日上,极大的占领了原来属于各种商业绘图软件的市场。不仅仅是在于其免费的属性,更重要的是随心所欲地自由定制。
但是参与的玩家多了之后,也会出现一些冲突。最近在运行一些三五年前的代码报错了,引发了我的思考。
正常的ID转换并不会报错
有时候我会使用 clusterProfiler 包的函数 bitr进行ID转换,代码如下:
> library(org.Mm.eg.db)
> library(clusterProfiler)
> gene <- bitr(rownames(need_DEG), fromType = "SYMBOL",
+ toType = "ENTREZID",
+ OrgDb = org.Mm.eg.db)
'select()' returned 1:1 mapping between keys and columns
Warning message:
In bitr(rownames(need_DEG), fromType = "SYMBOL", toType = "ENTREZID", :
19.2% of input gene IDs are fail to map...
但是五年前我是不用clusterProfiler 包的,之前的代码是select函数
现在select函数就报错
如下所示:
非常的诡异,首先它居然在没有赋值的情况下就把我的输入变量给修改了,不可思议!
实在是太不安全了!!!
略微思考了一下,猜测应该是这个select函数名字太大众了,所以在很多包里面都有,出现了冲突!
搜索看看select函数来自于哪里
可以看到优先级最高多的是dplyr包:
Help on topic 'select' was found in the following packages:
Subset columns using their names and types
(in package dplyr in library )
Ridge Regression
(in package MASS in library )
Objects exported from other packages
(in package tidygraph in library )
Objects exported from other packages
(in package clusterProfiler in library )
AnnotationDb objects and their progeny, methods etc.
(in package AnnotationDbi in library )
dplyr包设计的有问题啊,都不复制就修改了变量。鄙视它
我加上了select函数真正的来源
代码虽然复杂了一点:
library(org.Mm.eg.db)
gene_up=as.character(na.omit(AnnotationDbi::select(org.Mm.eg.db,keys = gene_up,columns = 'ENTREZID',keytype = 'SYMBOL')[,2]))
gene_down=as.character(na.omit(AnnotationDbi::select(org.Mm.eg.db,keys = gene_down,columns = 'ENTREZID',keytype = 'SYMBOL')[,2]))
head(gene_up)
但是这次就不报错了。
教程的隐患?
现在每次分析数据,都引入一大波R包,优先级关系很烦人,如果每个函数都需要显式调用,我以前的代码都会很麻烦!
最好的入门方式
如果你也想开启自己的生物信息学数据处理生涯,但是自学起来困难重重,还等什么呢,赶快行动起来吧!参加我们生信技能树官方举办的学习班:
数据挖掘学习班第8期(线上直播3周,马拉松式陪伴,带你入门),原价4800的数据挖掘全套课程, 疫情期间半价即可抢购。 生信爆款入门-第10期(线上直播4周,马拉松式陪伴,带你入门),原价9600的生信入门全套课程,疫情期间3.3折即可抢购。
生信技能树的粉丝都知道我们有一个全国巡讲的良心学习班,口碑爆棚,生物信息学入门省心省时省力!先看看大家的反馈吧: