移至主內容
首頁
SLAT Blogs

主導覽

  • 首頁
使用者帳號選單
  • 登入

導航連結

  1. 首頁
  2. 部落格
  3. 肥貓的異想世界

試處理R常見的non-zero exit status問題

By 肥貓, 14 九月, 2022

前言

三年前在修讀多變量統計課程的時候,剛好也是我往Ubuntu遷移的第一年,首要的挑戰也就是在Ubuntu上建立R的作業環境。當時其中一個最困擾我的問題,是安裝特定套件時,老是出現non-zero exit status的錯誤訊息,然後那個套件不能用,我就愣在那裡不知如何是好,情急時只好拿鄰近的Windows電腦,重建一個臨時的R環境救火。這樣對於平台轉移計畫來說當然不是好事,若因此貽誤作業或工作更是一場災難。

直到論文寫完服役前,我才有餘裕稍微靜下心來研究這問題該怎麼辦,當時剛好在學習用R做地形圖的時候,透過爬文和實作稍微學到解決方法,但當下還沒想到要寫下來。退役後我在學習使用Debian,重建R環境的時候剛好又遇到同樣的問題,用了一年前的方法排障,經驗大致上成功。於是我就把它寫下來存參:

探討成因:

我還沒有力氣搞清楚所謂的non-zero exit status到底是怎麼回事,從非技術人的角度,似乎只知道就是某個套件無法安裝,害我不能工作。不過在這裡也沒那麼重要。

實測發現可能成因除了使用的R版本過舊,造成有些套件不再被支援之外(不過這通常不是主要的原因);主要是電腦未安裝特定相依套件所造成。這裡借用吳紹裳老師的比喻,你做牛肉麵不是有麵就好,還要有高湯和牛肉等配料才行。R在Ubuntu或Debian的運作有件必須特別留意的事情是,許多相依套件其實本身不是R的套件,也不是在R的環境裡運作,而是直接和你的作業系統共享一些函式庫/套件,所以你的系統欠缺某些套件的時候,R就會陷入類似汽車空有引擎,卻沒有輪子時的窘態。

此時就要從錯誤訊息去看,還缺哪些Linux套件。請注意我把Linux套件標粗體,沒搞清楚這句話的含意,你可能會在安裝一些R誤以為不支援或該版本沒有,但是其實裝了Linux相關套件就能解決的問題上鬼打牆。

實例研討

光看我洋洋灑灑寫一堆,不如找個實際例子展示。通常我安裝完R第一件事,就是安裝社會科學領域常用的sjPlot套件。但是在Debian上初試啼聲立刻踢到鐵板。

圖中錯誤訊息意思大概是說,有個叫做nloptr的套件安裝失敗。後面還有lme4、emmeans、sjstats等套件也出了問題。就像鐵路即使只有一小段遇到落石,全線就要停駛一樣。任何程式的相依套件,即使是最小的套件出了問題,整個程式就是動不了。此時我的直覺是,好如果單獨安裝某套件,系統說R 4.0版已經不支援不能安裝(但我這裡沒附圖),要去4.1或更新版才有,那升級到(目前已知最新版)4.2總行了吧?殊不知又遇到類似問題。

這時候就要留意我剛才說的,有時候可能不是R版本的問題,而是少了特定Linux套件(如上圖藍色方框處所示)。如R此時告訴你,系統少了CMake套件,並請你用apt/yum...(個別linux發行版的套件安裝工具)安裝該套件。(操作情形類似下圖,雖然圖面上安裝的套件和上面寫的不一樣,但做法大同小異)

照上述步驟安裝完套件之後,再回到R的console,重複上一步驟(如install.package(sjPlot);快速鍵是↑)。實做後發現還是會出現好幾次錯誤訊息,但是每次系統都會告訴你還缺什麼東西,此時不要氣餒,按照提示把套件補安裝起來即可。

(PTT的)笨版上你並不孤單,我也是折騰了一個小時,畫面下緣才終於出現"DONE"的字眼(不過圖中我當時在處理的其實不是sjPlot,不過狀況類似)。此時稍微可以體會,工程師在電腦前面尖叫到底是怎麼回事。從RStudio畫面右上角的歷史紀錄(history)可以看到,我也是重複了好幾次同樣的安裝步驟(然後也被系統打臉了N-1次),才把這東西修好。不過如果花點小力氣可以把原本看似無解的問題搞定,還算是值得啦。

  • 肥貓的異想世界

部落格列表

管理日誌
LibreOffice 正體中文文件
肥貓的異想世界
軟體自由運動部落格
馬哥的大小事
My Libre World
社會派宅爸

最新文章

test title
Interview with Sandy Corzeta, Admin of Indonesia's Fediverse Instance 'misskey.id'
簡單處理在Ubuntu終端機啟動Miniconda的問題
在LibreOffice Calc利用Vlookup做精準搜尋
現在就加入 LibreOffice 團隊當全職開發者,處理 RTL/CTL/CJK 等事宜!
[JS 筆記] 可選串連、條件三元、falsy、some與includes
用QGIS + OpenStreetMap + Python 處理線形地理資料
申請墨西哥簽證的經驗談
0805 ITTS 田野筆記:與印尼開源社群的初次接觸
Setting up Mailman3 on Debian 11 (Bullseye)
試解決Zotero安裝後無法使用LibreOffice Integration引用文獻的問題
2023年5月的 LibreOffice 之月的獲獎者!
Powered by Drupal