Debug R 為什麼你需要保持R包是最新的?

2021-09-29 03:43:58 字數 1504 閱讀 5109

今天安裝乙個最新的r包的時候,提示要對一些依賴包進行更新,我沒有管他。結果當我執行以前沒有報錯的**時,卻出現如下的報錯,

報錯如下

上面的報錯出現在macos上,為了找到報錯,我用linux執行相同的**並沒有遇到報錯。於是用sessioninfo()對r包版本進行比較。

通過不斷的比較,最終將問題定位到xvector上,發現linux的版本是最新的,而macos的版本是舊的。

進一步,我發現0.20.0版本是來自於bioconductor 3. 7, 而最新的bioconductor版本是3.8. 同時今天安裝的包也來自於3.8的bioconductor,因此出現了不相容的情況,導致報錯。

那麼問題來了,xvector到底是什麼?一直默默無聞的它到底有什麼作用呢?我開啟了他的幫助文件,仔細閱讀了一下,結論如下:

xvector是r語言自帶的vector的強化,它允許"通過位址傳值", 而不需要將在記憶體中新開闢區域將資料拷貝過去進行運算。 這樣子的好處就是節約記憶體,不然你想獲取乙個非常大的乙個向量中的第i到第j個元素,那你就得先開闢乙個很大的乙個記憶體空間,然後在進行取值,最後返回區間內的數值,時間花費非常的大。

讀完這個函式之後,你會得出乙個結論,xvector 是乙個基礎設施,提供乙個xvector類,其他函式建立在它的基礎上。應該還有乙個更加底層的東西。

於是我又返回去看我載入包時的warning資訊,有乙個concatenateobjectes引起了我的注意。

更底層的問題

我通過谷歌搜尋,找到了最終的答案,原來是bioconductor社群把乙個底層函式改名了。所以建立在這個底層函式上摩天大廈就瞬間坍塌了。

3.8

開源軟體的一大問題就在於此,新的工具為了不重複造輪子會依賴於已有成熟工具。已有的工具會不斷的更新,如果突然有一天,作者把原有函式全改了,同時他居然還不提供的乙個緩衝時間段,也就是讓舊函式名和新函式名同時並存一段時間,結果你就傻眼了(放心,乙個合格的程式設計師不會這樣子瞎搞的)。

最後給兩個建議:

為什麼你需要建立測試

測試是檢查 操作的簡單例程。測試在不同的級別上執行。一些測試可能應用於乙個微小的細節 特定的模型方法返回值是否像預期的那樣 而另一些測試則檢查軟體的整體操作 在站點上的使用者輸入序列是否會產生預期的結果?它使用shell來檢查方法的行為,或者執行應用程式並輸入資料來檢查它的行為。自動化測試的不同之處...

為什麼需要PKI

為什麼需要pki 隨著電子商務的迅速發展,資訊保安已成為焦點問題之一,尤其是網上支付和網路銀行對資訊保安的要求顯得更為突出。為了能在網際網路上開展安全的電子商務活動,公開金鑰基礎設施 pki,public key infrastructure 逐步在國內外得到廣泛應用。我們是否真的需要pki,pki...

為什麼需要prototype

1.new object var newobj new object newobj.name keti newobj.color red newobj.changecolor function color 這種方法看上去很蠢,所以我們找到另一種方法 使用literal直接建立,看上去要優雅得多 2....