「Debug R」為什麼你需要保持R包是最新的?
今天安裝一個最新的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社群把一個底層函式改名了。所以建立在這個底層函式上摩天大廈就瞬間坍塌了。
開源軟體的一大問題就在於此,新的工具為了不重複造輪子會依賴於已有成熟工具。已有的工具會不斷的更新,如果突然有一天,作者把原有函式全改了,同時他居然還不提供的一個緩衝時間段,也就是讓舊函式名和新函式名同時並存一段時間,結果你就傻眼了(放心,一個合格的程式設計師不會這樣子瞎搞的)。
最後給兩個建議:
- 請儘量保證你的R包最新
- 同時請用那些一直在維護的R包
相關文章
- 什麼是r語言R語言
- ERC721R 是什麼?
- 在R語言中,因子是什麼R語言
- Elasticsearch:是什麼?你為什麼需要他?Elasticsearch
- 「翻譯」什麼是SAP F&R?
- 為什麼AI數不清Strawberry裡有幾個 r?Karpathy:我用表情包給你解釋一下AI
- 最新R0值3.11,疫情何時高峰難預測,這是你該知道的最新進展
- 一文告訴你什麼是NAT,為什麼需要NAT
- R語言的特點是什麼?和Python有何區別?R語言Python
- R:microtable包隨機森林隨機森林
- 安裝R包常見的方法
- 【SRE工程師】Linux系統中cp命令的引數r和R有什麼不同?工程師Linux
- 什麼是 SCRM,企業為什麼需要SCRM?
- 【前端筆記】Vuex 是什麼,為什麼需要前端筆記Vue
- R語言中安裝 maptools 包R語言APT
- 閉包是什麼?怎麼形成一個閉包?為什麼使用閉包?
- MATLAB R2023a最新金鑰補丁 MATLAB R2023a破解下載Matlab
- 什麼是Web workers?為什麼我們需要他Web
- 你的企業為什麼需要敏捷轉型敏捷
- win10系統安裝intel(r) rapid storage technology的原因是什麼Win10IntelAPI
- 資料科學大Battle,你站Python還是R資料科學BATPython
- SAP R/3系統的R和3分別代表什麼含義,負載均衡的實現原理負載
- 【Java面試】什麼是 ISR,為什麼需要引入 ISRJava面試
- 什麼是雲原生?企業為什麼需要雲原生?
- 什麼是閉包?閉包的作用是什麼?
- Python中什麼是閉包?閉包的好處是什麼?Python
- 為什麼你的企業需要線上工時表?
- 為什麼你可能不需要GraphQL?
- 京東二面:為什麼需要分散式ID?你專案中是怎麼做的?分散式
- 「支援M1/M2」 MATLAB R2023b最新中文版安裝包+MATLAB R2023b破解補丁教程Matlab
- 為什麼Redux 需要 reducers是純函式?Redux函式
- 什麼是Linux?為什麼企業會需要Linux運維?Linux運維
- 海外問卷調查是什麼,為什麼需要代理IP?
- 【r
- 資料科學領域,你該選 Python 還是 R ?資料科學Python
- OPPO R15上市時間與價格預測 OPPO R15什麼時候上市?
- R:SNP資料篩選.R
- 適合R5-2600搭配的顯示卡推薦 R5 2600配什麼顯示卡好?