劉小澤寫于2020.4.19
題目依然是花花幫忙起的
今天來(lái)介紹一個(gè)簡(jiǎn)單又實(shí)用的需求,就是如何自動(dòng)化給每個(gè)包添加對(duì)應(yīng)的說(shuō)明和版本信息
前言
我們首先來(lái)假設(shè)一個(gè)情境,而且一定會(huì)遇到:
我自己有一個(gè)腳本,想發(fā)給別人用,但別人收到后卻產(chǎn)生某個(gè)包的報(bào)錯(cuò)。于是第一步,他會(huì)問(wèn):你用的R包都是哪個(gè)版本啊?我怎么重復(fù)不出來(lái)?
這時(shí)一般我們會(huì)用sessionInfo(),得到下面的全部配置
但當(dāng)我們安裝的R包數(shù)量有點(diǎn)多時(shí),別人可能要仔細(xì)從中尋找對(duì)應(yīng)的包的版本

那么問(wèn)題來(lái)了:能不能一開(kāi)始加載包的時(shí)候,就直接標(biāo)注包的版本呢?
一個(gè)善于觀察的人寫了一個(gè)有趣的包
這個(gè)人叫:Luis Verde Arregoitia (https://github.com/luisDVA/annotater)
他在幫助同事進(jìn)行R debug時(shí)發(fā)現(xiàn),同事的腳步中調(diào)用了大量的R包,而且錯(cuò)誤主要是由于包的依賴關(guān)系沒(méi)有搞好(可能某個(gè)依賴包的版本太舊或者太新),另外有很多R包已經(jīng)忘記是做什么用的了,需要現(xiàn)場(chǎng)一個(gè)一個(gè)查。
最后,他利用utils::packageDescription()對(duì)每個(gè)包都查看了一下title和version,最后整理出來(lái),標(biāo)注好了每個(gè)包的作用

# package load ------------------------------------------------------------
library(readr) # Read Rectangular Text Data
library(dplyr) # A Grammar of Data Manipulation
library(sensiPhy) # Sensitivity Analysis for Comparative Methods
library(tibble) # Simple Data Frames
library(weatherData) # Get Weather Data from the Web
他嫌一個(gè)一個(gè)操作太麻煩,于是他寫了個(gè)包,對(duì)每個(gè)R包批量進(jìn)行utils::packageDescription 查看,并且一鍵式操作
我們來(lái)看看這個(gè)包
首先是安裝
# install.packages("remotes")
remotes::install_github("luisdva/annotater")
然后重啟rstudio,會(huì)發(fā)現(xiàn)插件(Addins)這里多了這個(gè)annotater包

最后一鍵式操作,點(diǎn)擊Annotate package calls in active file
就會(huì)看到:

來(lái)一個(gè)動(dòng)圖:

當(dāng)然,除了能看每個(gè)包的作用(也就是它們的標(biāo)題),版本可能是更為關(guān)心的
再來(lái)一個(gè)動(dòng)圖:

但這里需要說(shuō)明,這個(gè)插件只能在library()后面沒(méi)有注釋的情況下使用;
當(dāng)添加了標(biāo)題信息后,就不能繼續(xù)在后面添加標(biāo)題信息除非把之前的標(biāo)題信息換行,保證library()沒(méi)有注釋,就可以繼續(xù)添加新的版本信息【就像下面這樣】

最后再回顧一下兩個(gè)常用的功能:

歡迎關(guān)注我們的公眾號(hào)~_~
我們是兩個(gè)農(nóng)轉(zhuǎn)生信的小碩,打造生信星球,想讓它成為一個(gè)不拽術(shù)語(yǔ)、通俗易懂的生信知識(shí)平臺(tái)。需要幫助或提出意見(jiàn)請(qǐng)后臺(tái)留言或發(fā)送郵件到jieandze1314@gmail.com
