寫在前面
知道我的朋友,相信都有了解,元旦假期某晚凌晨,我突發(fā)起來(lái),折騰了一個(gè)困擾我很久很久的問(wèn)題,并解決了他。
2015年,TBtools 開(kāi)發(fā)之前,我寫過(guò)一個(gè) Blast3GO,主要用于 GO 注釋,富集分析以及可視化。Blast3GO 實(shí)現(xiàn)的這些功能,基本都是調(diào)用環(huán)境中的 R,于是存在四大問(wèn)題:
- 依賴用戶環(huán)境中的 R語(yǔ)言,換句話說(shuō),要求用戶自己安裝 R
- 存在破壞用戶原有 R 語(yǔ)言環(huán)境的可能
- 無(wú)法實(shí)現(xiàn)絕對(duì)的版本控制,以至于無(wú)法保證用戶體驗(yàn)
- 確實(shí)不穩(wěn)定....
這些經(jīng)歷,使得我在開(kāi)發(fā) TBtools 之后,追求絕對(duì)純粹的 Java 實(shí)現(xiàn)。于是 TBtools 得以獲得某種程度的 便攜,簡(jiǎn)單,簡(jiǎn)潔,高效。為了解決可視化問(wèn)題,我自己從零實(shí)現(xiàn)了一個(gè)繪圖引擎,也就是大伙知道的 JIGplot,并一直堅(jiān)持優(yōu)化。所以,我一直不想去打包任何可以不打包的軟件,更希望自己實(shí)現(xiàn)。
然而,幾年過(guò)去了,我越來(lái)發(fā)現(xiàn),每個(gè)人的時(shí)間,精力是絕對(duì)有限的。我可以自己寫很多功能,卻無(wú)法做到絕對(duì)的全面,比如轉(zhuǎn)錄組數(shù)據(jù)分析中的差異表達(dá)分析。我們幾乎可以下個(gè)結(jié)論,幾乎全部差異表達(dá)分析軟件,都是 R 包(盡管大伙還是知道有 gfold 的)。于是,我只有兩個(gè)選擇:
- 自己寫,這個(gè)不可能,也沒(méi)有意義,畢竟這個(gè)輪子造起來(lái)也不一定能得到認(rèn)可,他不比可視化
- 打包 R,windows下很簡(jiǎn)單,但是 macOS 呢?TBtools 至少有 10% 的用戶是 MacOS 用戶
我希望的是 TBtools 繼續(xù)保持他的跨平臺(tái),所以所有功能都是至少支持 windows + MacOS??梢哉f(shuō),元旦假期,我所有抽得出來(lái)的時(shí)間,加上我在過(guò)去一兩年,嘗試失敗,再嘗試再失敗,還嘗試還失敗,繼續(xù)嘗試,繼續(xù)失敗的數(shù)次,得到的就是一個(gè)簡(jiǎn)單的東西。TBtools 的新插件“Rserver”。
插曲 - 更新 TBtools 版本
11月底,去版納植物園做了一場(chǎng) TBtools 培訓(xùn),培訓(xùn)期間發(fā)現(xiàn),TBtools 的插件安裝存在兩個(gè)優(yōu)化的點(diǎn):
-
MacOS 的插件選擇界面,拖拽面板還是遮擋了文件選擇面板,這塊之前在邵揚(yáng)的提醒和幫助下,原本是修復(fù)的,只是....代碼忘記啟動(dòng)。改動(dòng)前
-
TBtools 插件分為兩類:小插件,無(wú)依賴,僅
.jar文件。對(duì)于小插件,除非用戶確實(shí)沒(méi)事做,回去解壓出來(lái)(盡管也沒(méi)啥用),否則都是順利安裝;大插件,有依賴,于是我一般打包成.zip文件,然而還是存在不少人習(xí)慣性解壓縮,最后導(dǎo)致插件沒(méi)有完整安裝。這不是好事。但可以理解,畢竟,任何人看到壓縮包(尤其是圖標(biāo)對(duì)應(yīng)上了)的第一反應(yīng)是解壓縮。改動(dòng)前,
針對(duì)這兩點(diǎn),我做了優(yōu)化。首先是 MacOS 的插件安裝面板代碼生效;
其次是進(jìn)一步支持了難以被自動(dòng)識(shí)別的文件后綴.plugin....這樣我相信就不會(huì)被解壓縮了...
Rserver 插件的安裝
目前這個(gè)插件已經(jīng)釋放到所有 TBtools 使用交流群(1-7,Emmm,數(shù)了一下,又回復(fù)到之前的狀態(tài),不過(guò)現(xiàn)在大伙都實(shí)名了,我相信應(yīng)該好得多)。直接在群共享下載最新版本的 TBtools_JRE1.6.jar,這個(gè) jar。更新到 TBtools v1.074。當(dāng)然,如果你不更新,那就記得下載 Rserver.zip,反正主程序跟插件耦合程度極低。
OK,拿到這個(gè)插件。就可以安裝。首先打開(kāi) TBtools

找到插件安裝位置,點(diǎn)擊
Install Plugin
拖拽放置,或直接文本選擇摁鈕選擇之后,點(diǎn)擊打開(kāi),稍等一會(huì)即可(插件較大,大概180+Mb,Windows 和 MacOS 用戶通用一個(gè)插件!)。

插件的使用
Rserver 插件,我原本想做的只是一個(gè)差異表達(dá)分析插件,但從插件的體積來(lái)看,這樣并不合適。畢竟以后任何人愿意貢獻(xiàn)出 R語(yǔ)言 腳本的,都可以制備成 TBtools 插件并分發(fā)。于是,我調(diào)整計(jì)劃,直接將 Rserver 插件作為一個(gè)將會(huì)被其他所有 R腳本 插件所依賴的插件來(lái)開(kāi)發(fā)。完美。這樣我只需要細(xì)調(diào)測(cè)試插件即可(注意到,盡管我們有1w+人的社群,但我只召集到不超過(guò)20個(gè) MacOS 用戶幫忙測(cè)試;windows不用)。
使用插件非常簡(jiǎn)單,首先是打開(kāi)插件

設(shè)置一個(gè)輸出目錄,其他均不設(shè)置,這樣會(huì)啟動(dòng) Rserver 插件的測(cè)試腳本。

如此,點(diǎn)擊
Start之后,輸出目錄會(huì)生成一個(gè)Rplot.pdf文件。稍微知道 R 使用的人就會(huì)清楚。只要沒(méi)設(shè)置繪圖文件路徑,同時(shí)又在命令行運(yùn)行,那么 R 會(huì)直接保存一個(gè)文件到 Rplot.pdf。打開(kāi)這個(gè)文件,即可看到
當(dāng)然,加入你填入了一段 R 腳本,比如
https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/p.adjust
網(wǎng)頁(yè)上的這段代碼(邵揚(yáng)提到的)...

輸出結(jié)果如下

當(dāng)然,你可以檢測(cè)和安裝一個(gè)R包(比如大家都愛(ài)的
ggplot2)
于是你會(huì)得到

關(guān)于拓展
我們完全可以預(yù)見(jiàn)這個(gè)插件將會(huì)帶來(lái)的功能絕對(duì)拓展:
- 只要一個(gè) TBtools 用戶能跑的 R碼,換另一個(gè) TBtools 用戶,一樣能跑,因?yàn)槠脚_(tái)完全固定
- 對(duì)于 R腳本來(lái)說(shuō),絕大多數(shù)用戶進(jìn)行修改的,往往只是輸入輸出文件,這點(diǎn)完全可以通過(guò) TBtools 快速打一個(gè) GUI 界面()
- Rserver 插件也直接支持用戶原始的 R腳本代碼,換句話說(shuō),可以寫 R包依賴檢測(cè)與安裝,可以直接在代碼中設(shè)置輸入輸出文件或目錄.... 甚至可以.....
寫在后面
昨晚我陪吳老師看了一場(chǎng)電影。這是兩年來(lái)我們第一次能抽出時(shí)間看的一場(chǎng)完整的電影(盡管票價(jià)不低,35一張)??ㄍ娪斑€不錯(cuò),最近似乎有點(diǎn)火的,《心靈奇旅》。從我的角度來(lái)看,這部電影傳達(dá)一個(gè)理念或許就是:享受生活,活在當(dāng)下。
當(dāng)然,這并不太準(zhǔn)確。我們討論了一會(huì),多少讓我想起了我似乎從小學(xué)就開(kāi)始在思考的問(wèn)題。即,
活著,為了什么?當(dāng)然史鐵生在《我與地壇》給出了一個(gè)不錯(cuò)的答案死是一件不必急于求成的事。
這段時(shí)間一直在路上,或許人生就是在路上。
《心靈奇旅》一條主線,演繹了兩類人:
- 人生中只有目標(biāo)
- 人生中毫無(wú)目標(biāo)
當(dāng)然,什么才是人生目標(biāo)?就不劇透了,大伙感興趣的可以看看。
回到主題。
關(guān)于 TBtools 的開(kāi)發(fā),盡管我一直有源源不斷的新的開(kāi)發(fā)想法,但如果說(shuō)我馬上進(jìn)入工作,無(wú)法在其上投入過(guò)多。那么我會(huì)留下的只有兩個(gè)遺憾:
- 我希望能提供一個(gè)可能,TBtools 用戶能夠在相互分享 TBtools 相關(guān)的內(nèi)容,以前我想過(guò)是卡通熱圖,后來(lái)...總之一直想一直失敗,但現(xiàn)在,我想 Rserver 插件馬上會(huì)提供這個(gè)可能。
- 我寫過(guò) EasyGUI 或 AutoGUI,這兩個(gè)實(shí)現(xiàn)和想法,我一直沒(méi)有放下,然而他們似乎并無(wú)用武之地 。但現(xiàn)在不會(huì)了,我相信很快,這些想法也會(huì)用上。
有時(shí)候,或許從技術(shù)層面來(lái)說(shuō),你學(xué)過(guò)的想過(guò)的每一個(gè)點(diǎn),都可能不會(huì)是白費(fèi)功夫。



