当年我准备考博的时候,健康院某PI(本来的意向导师)找我帮他在iMac上安装盗版的Papers(文献管理器)和Illustrator(PS的兄弟),安装后,跟我说:“我们做科研的,最重要的软件就是Papers和Illustrator。”,当然后来感觉挺坑我,就放弃了。

这么多年过去了,至今这两个软件我都没用过!我画图,追求的是全部由代码产生,至今还没有修图的需求,也就没有试过Illustrator了。

Illustrator必须有些门槛,而且关键是Adobe绑死在PDF上,实际上如果80%的问题都可以用PowerPoint解决,剩下那20%,反正也不常用。而PowerPoint的优点是没有门槛,傻瓜式操作,像我这种怀疑自己智商的人,都会用啊!

要是R画的图,能够在PowerPoint里面编辑就好了!

要是R画的图,能够在PowerPoint里面编辑就好了!

要是R画的图,能够在PowerPoint里面编辑就好了!

Continue reading

biobabble作者群有一个小伙伴提出来的问题。

没错,凡是给biobabble投稿的小伙伴都会被拉入作者群。

话说有一个矩阵,我们让它某个值缺失,算出来的距离和原来的竟然是一样的:

> dat = matrix(1:10, 2)
> dist(dat)
         1
2 2.236068
> dat[1,1] = NA
> dist(dat)
         1
2 2.236068

这有点反直觉,实际上你再搞个缺失值,它算出来还是一样的:

> dat[1,3] = NA
> dist(dat)
         1
2 2.236068

但以我的经验,我通常不敢轻易说人家有bug,我们得确认一下。

Continue reading

在《一图告诉你venn plot和upset plot的关系》一文中,我们应该很清楚这两者的关系,upset plot是更清晰的呈现方式,而且能够支持无数多个分类,在《转UpSet图为ggplot?》一文中,又介绍了一个转化UpSetR输出为ggplot2便于嵌图和拼图的方法,但这个需要一个补丁,然后我提交的这个补丁,一直没有被作者接收。而且毕竟UpSetR是用grid写的,像grid这种高级货,玩起来还是有点难度,我一直在想应该有一个ggplot2版本的upset plot,最近就让我在gayhub上发现了。

这包已经在CRAN上,所以可以用最简单的方式安装:

install.packages("ggupset")
library(tidyverse)
library(ggupset)

tidy_movies %>%
  distinct(title, year, length, .keep_all=TRUE) %>%
  ggplot(aes(x=Genres)) +
    geom_bar() +
    scale_x_upset(n_intersections = 20)

Continue reading

你是否对《R包辣鸡之CorMut》之篇还有印象?没有的话,快点打开阅读一下,这文章让作者毕业了,毕竟发表的是一篇Bioinformatics。

[连载3]:辣眼睛,一篇抄袭引发的系列血案!》,而这一篇文章中揭露了某讲师抄袭了两个R包,晋升副教授了!文章中还稍带了另外一个学生也是抄袭,当然也发表了SCI,也毕业了。

今天讲另外一个R包,它做下面的事情:

当然前面的事情是goseq干的,它的功能就是衔接了goseq的输出,让我们还看看它每一步都在做什么。

Continue reading

在《一个更好用的pheatmap》一文中介绍了pheatmap的新功能,它输出为一个pheatmap的对象,这个对象在终端上打出来,会出来图,你可以用ggplot2::ggsave()来保存图片,文章的结尾处卖了一个关子,就是用cowplot来拼,这个有许多人问过我,因为大家一般都认为cowplot只能用于ggplot2的输出,pheatmap感觉好像不太行,而且在很多人的感觉中,画图代码不是ggplot2写的,就是base写的,而pheatmap看上去就像是base一般,其实它是grid写的,我在下面两篇文章中都有示例代码,用于拼pheatmap,不过一般人看过了,也只是留下一点印象,终究还是记不住,因为涉及到grid的知识。

现在我们有一种你一定能记得住的方法了,以后再也不用问pheatmap怎么拼图了,首先pheatmap产生的是一个对象,然后这个对象我们可以用ggplot2给画出来,然后自然而然你能够用cowplot去拼,再熟悉不过了,如果这都不能理解记住,那我也没办法了。

Continue reading

怎么提问,是需要学习的

我写过不少文章,都有提及提问的礼仪,会提问的人,比较容易得到帮助,而不会提问的人,理你才怪,比如说明明出错信息很明显,还给了你解决的提示而你却不看。举个例子现在需要编译的R包,如果缺少库文件,报错的话,一般会提示你Debian/Ubuntu系列apt安装什么包,Redhat系列yum安装什么,MacOS的话,brew安装什么,你按照提示装上再说,你不懂的话,你还不会把出错信息贴出来google一下吗?一般都有人解决了。 一个错误的示范

Continue reading

有一些软件做了检验之后,是不告诉你那些基因在某个富集的通路中,显然做为生物学家,是对此有兴趣的。clusterProfiler系列,全部函数都会输出,但看基因ID,比如ENTREZID或ENSEMBLE,这些都对人类不友好,看了你也不知道是什么,为了让大家看结果的时候,还能有点感觉,我们需要把基因翻译成symbol,有那么一批函数比如DO、GO、Reactome的分析都是有readable参数的,但有一些是没有这个参数的,我被问得最多的是KEGG的分析为什么没有!

首先GO为什么有?因为enrichGOgseGO都是使用OrgDb,而OrgDb本身带有ID转换的注释,而KEGG是在线去检索KEGG数据库的,KEGG并没有提供这些信息,当然对于少量大家比较熟悉的模式生物,要支持还是很容易的,然而有些物种支持,有些不支持,大家又会问了,凭什么我做的物种被BS了。所以啊,大家都不支持,挺公平。其实KEGG数据库里那么多的生物,很多物种是没有基因名的,有很多生物的注释还停留在基因座,你让我帮你转ID,臣妾做不到啊。

但起码对能支持的物种支持一下呗,以我一贯的作风,能帮小白解决的小问题,我都会去解决。于是我们有setReadable函数。但凡你能找到一个OrgDb,你就能用来转ID,就这样。

Continue reading

Author's picture

Guangchuang Yu

a senior-in-age-but-not-senior-in-knowledge bioinformatician

Postdoc researcher

Hong Kong