劉小澤寫(xiě)于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è)善于觀察的人寫(xiě)了一個(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è)操作太麻煩硫嘶,于是他寫(xiě)了個(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