在 M1 Mac 的 VS Code 執行 R

2021/03/11 Updated: 最近 VS Code 更新為 1.54.1 之後原生支援了 M1。照理說原本是應該開心的,但... 因為有許多東西目前還是得在 Rosetta 2 底下才能正常運作,因此像這篇所說的設置在 VS Code 更新之後就完全修不好了。即便我在 r.rterm.mac 中加了 arch -x86_64 作為前綴,還是出現了錯誤訊息說它找不到 R client,真的是見鬼。目前也不太知道是該等 R extension 的作者修,還是該等 Radian 以及 R 原生支援 M1 才能修好了。
===== =====

最近買了一台搭載了好香 M1 的 MacBook Air(TSMC's 5nm inside!),有一些心得但簡單來說就是超快、超省電,然後依然有一些軟體跟外接硬體的相容性問題。不過,對於得(部分)靠寫程式吃飯的我來說,最頭痛的事情其實是開發工具們非常混亂地同時存在著 ARM 以及 x86 兩種版本。

比方說,brew 在安裝的時候如果沒有特別處理,就會裝在 /opt/homebrew/bin/ 底下(ARM 版本);如果讓 Terminal 在 Rosetta 2 底下執行的話,就會裝在 /usr/local/bin/ 底下(x86 版本)。類似的情況在處理各種 library 的時候層出不窮,就算想要盡量裝可以有原生效能的 ARM 版本,也有可能裝到一半的時候發現 library 需要的 dependencies 有的就是只能在 x86 模式底下執行而得整個換成在 Rosetta 2 的環境底下安裝。

最近因為上課需要用到 R 而試著在 M1 上安裝看看。以往雖然聽過 R 在統計上非常泛用,但因為自己已經很習慣用 Python 所以一直沒有去學,這次因為課堂需求就不得不用了。R 在 M1 上的安裝沒有什麼問題,問題出在當我想要在 VS Code 可以直接執行 R 的時候就撞牆了。

我主要參考了 A fresh start for R in VSCode 這篇,但問題在於我實在不曉得 R executable 到底路徑在哪。原本猜想可能跟 MATLAB 一樣要直接到 R.app 的 Package Contents 裡面找,結果是找到了,但只會在 VS Code 打開的時候把 R.app 開起來,還是沒辦法在 VS Code 裡面直接執行。之後又看到在文章中提到的 R LSP Client 在說明中寫到 R binary 在 Linux 以及 macOS 的路徑應該是 /usr/bin/R。雖然看起來非常合理,但就像一開始說的,在 M1 底下安裝的 library 已經不像以前的路徑了,結果就是真的什麼也沒找到。

最後只好搜尋整台 Mac,搜尋條件設定為 

Name is R
System files are included

終於找到了一個看起來可行的路徑是

/Library/Frameworks/R.framework/Versions/4.0/Resources/bin/R
(根據版本不同應該路徑會有一點不同)

把 VS Code 的設定中 r.rpath.mac(以前是 r.lsp.path)以及在 r.rterm.option 中的 --r-binary 改成這個路徑一切就大功告成啦!也就是說在你的 settings.json 中這段會看起來像

"r.rpath.mac": "/Library/Frameworks/R.framework/Versions/4.0/Resources/bin/R",
"r.rterm.option": [
    "--no-save",
    "--no-restore",
    "--r-binary=/Library/Frameworks/R.framework/Versions/4.0/Resources/bin/R"
],

設定完成後只要在 VS Code 開啟的 .r 檔中按下 cmd+shift+s 就可以執行囉!

留言

這個網誌中的熱門文章

[macOS High Sierra] 避免High Sierra將檔案系統升級為APFS

[S7換機紀錄] 如何減輕AMOLED傷害你的眼睛

[S7換機紀錄] 完全自訂S7的實體按鍵