R for macOS 常見問題

下一頁:,上一頁:,向上:(dir)  

R for macOS 常見問題

R for macOS 常見問題

版本 4.3.1 2023-06-16,R.app 1.79

Stefano M. Iacus
Simon Urbanek
Rob J. Goedman
Brian Ripley



下一頁:,上一頁:,向上:R for macOS 常見問題  

1 簡介

本文件包含 R.APPR 的使用者指南,以及在 macOS 上使用 R 的資訊,補充了主要的 R 手冊,其最新版本可在 https://r-cran.dev.org.tw/manuals.html 找到。

在本文中,R 指的是核心、基於命令列的 R 系統,而 R.APP 指的是控制底層 R 的基於 GUI 的 Mac OS 應用程式。

此「R for macOS 常見問題」目前相當不完整,需要使用者提供意見。任何特定於 R 語言的問題都可以在主要的 R-FAQ 中找到(請參閱 https://r-cran.dev.org.tw/doc/FAQ/R-FAQ.html)。請將您希望獲得解答的任何要求/問題寄送至 R-SIG-Mac 郵件清單(訂閱後),以及對此常見問題的意見。

本文的最後一節包含最常被問到的問題,這些問題並未嚴格符合上述任何類別 - 如果您的問題不符合上述任何類別或未在特定部分中獲得解答,通常最好查看該部分。在 R-SIG-Mac 上尋求協助之前,請務必閱讀此常見問題!


下一頁:,上一頁:,向上:簡介  

1.1 有多少個版本的 R for macOS?

R for macOS 只有單一版本。然而,macOS 上的 R 可在命令列上使用,就像在其他 Unix 系統上一樣,或透過 R.APP GUI(請參閱 R.app)使用。第二種方式是 Macintosh 使用者最常偏好的方式。


1.2 R for macOS 可在哪些機器上執行?

64 位元 Intel 架構的 Mac,也就是 2008 年中之後製造的任何機器。

R 4.1.0 開始,針對 ARM 架構的 Mac(稱為「M1」和「Apple Silicon」)有獨立的組建,儘管 Intel 架構的發行版在「Rosetta」模擬下運作良好。


1.3 如何取得並安裝 R for macOS?

R 可在 CRAN 上取得,形式為安裝程式套件,其中包含 R 架構和 R.APP GUI。套件通常命名為 R.pkg,並加上版本號碼(可選)。

安裝方式為雙擊安裝程式套件。安裝程式將引導您完成必要的步驟。請注意,它會要求輸入具有管理員權限的帳戶密碼或登入。安裝可以自訂,但預設值適合大多數使用者。

R-patched 和 R-devel 版本的快照可從 http://mac.R-project.org/ 取得,包裝方式相同。

進一步的詳細資訊,包括解除安裝和從來源建置 R,請參閱「R 安裝和管理手冊」。


下一頁:,上一頁:,向上:macOS R 常見問題集  

2 R.app

R.APP 是 macOS GUI 的名稱,在 R 2.0.0 中引入。它顯示為標籤為 R 的圖示,但為避免與一般的 R 混淆,我們偏好使用在 GUI 上使用「取得資訊」時顯示的名稱:R.APP,代表 R 應用程式

內部而言,R.APP 是 Cocoa 程式(因此以 Objective C 編寫),連結到作為架構安裝的嵌入式 R


下一頁:,上一頁:,向上:R.app  

2.1 如何取得 R.app

R.APP 是 macOS R 二進位發行套件的一部分,可從 CRAN 取得。該發行套件包含一個套件,其中包含 R 架構和 R.APP

R.APP 的開發版本會以磁碟映像檔的形式每日提供,其中包含 R.APP 本身。請參閱 CRAN 上的 macOS 頁面,以取得如何取得此類快照的詳細資訊(目前為 http://mac.R-project.org/)。


下一頁:,上一頁:,向上:R.app  

2.2 如何安裝 R.app

R.APP 的安裝方式與 R 架構相同,也就是使用 CRAN 上提供的二進制套件。 CRAN 網站的 bin/macosx 目錄中包含一個名為 R.pkg 的標準 Apple 安裝程式套件(可選擇包含版本號碼)。下載並雙擊套件圖示。

請仔細閱讀 CRAN 網站 bin/macosx 目錄中關於 tcltk 和 Fortran 使用方式的說明。


下一頁:,上一頁:,上一層:R.app  

2.3 R 主控台

本節將提供 R.APP 的一般資訊。若要透過 R.APP 執行特定 R 工作,可以使用選單,請參閱以下內容(請參閱 選單)。


下一頁:,上一頁:,上一層:R 主控台  

2.3.1 輸入和輸出

R 主控台目前的設計是為輸入(使用者)和輸出(R)提供單一框架。


下一頁:,上一頁:,上一層:R 主控台  

2.3.2 複製和貼上

複製和貼上在 R 中就像在其他任何 Macintosh 應用程式中一樣。

如果您想要高解析度圖形匯出,您可以使用「檔案/另存為」功能表項目儲存 PDF 格式(請參閱Quartz 裝置)。或者您可以透過 pdf()jpeg() 等在 R 中使用支援的格式(輸入 ?capabilities 以取得更多詳細資料)。


下一頁:,上一頁:,上一層:R 控制台  

2.3.3 目前和啟動工作目錄

如果在偏好設定中未另行指定(請參閱偏好設定),或者如果指定的路徑不再可用,則啟動時的預設工作目錄為使用者家目錄。可以使用 setwd R 指令或使用 雜項 功能表項目 變更工作目錄 來變更工作目錄。最後,可以透過將資料夾拖放到 R.APP 圖示來對單一 R 會話使用特定目錄。如果 R.APP 未執行,這將導致 R.APP 在與拖放資料夾對應的目錄中啟動。可以在命令列上達成相同目的 – 例如 open -a R . 會導致 R.APP 使用目前目錄作為啟動工作目錄啟動。

如果您想要不同的啟動程序定義.Rprofile,此功能會很有用;您可以在特定目錄中編輯.Rprofile(包含您個人初始化R命令),並使用偏好設定(或上述任何其他方法)來變更啟動目錄。下次您啟動R.app時,.Rprofile會在啟動時由R讀取並執行。這等同於在 Unix(或命令列)上從不同目錄啟動R


下一頁:,上一頁:,向上:R 控制台  

2.3.4 調整 R 控制台大小

當 R 控制台視窗調整大小時,R 選項寬度會適當地設定,讓任何未來的輸出都能符合視窗大小。


上一頁:,向上:R 控制台  

2.3.5 R 控制台文字顏色

使用偏好設定視窗來設定 R 控制台文字顏色(請參閱偏好設定)。


下一頁:,上一頁:,向上:R.app  

2.4 一般功能


下一頁:,上一頁:,上一層:一般功能  

2.4.1 編輯器

R.APP 提供一個整合式編輯器,用於編輯 R 程式碼。它具備許多功能,旨在協助在 R 內開發程式碼。最常使用的功能可能是透過按下 Command-Return 直接從編輯器執行程式碼。其他功能包括語法突顯、大括弧配對、程式碼完成和函式索引。


下一頁:,上一頁:,上一層:一般功能  

2.4.2 編輯器復原和行號

編輯器支援適當層級的復原/取消復原操作(過去是全部或沒有)。編輯器有一個選用功能,可以顯示行號。這有助於找出錯誤訊息。編輯器也會回應「前往行」編輯功能表功能。相關的偏好設定面板允許啟用/停用行號,以及設定行號欄寬度(以容納較大的行號)和文字邊界寬度。


下一頁:,上一頁:,上一層:一般功能  

2.4.3 編輯器文字完成

編輯器中輸入的類型(檔案名稱和 R 程式碼)的完成可透過「編輯」功能表中的「完成」或輸入 Control-.(與 Xcode 相同)來使用。它使用與主控台視窗相同的設施(為了相容性,主控台會回應 TabControl-.)。


下一頁:,上一頁:,向上:一般功能  

2.4.4 編輯器函式清單

編輯器會維護一個編輯文件中定義的函式清單。此清單會顯示在工具列中,並會在你輸入時更新。從該清單中選取函式會導致游標跳到函式的開頭。


下一頁:,上一頁:,向上:一般功能  

2.4.5 編輯器語法著色

編輯器支援 R 程式碼的語法重點標示。你可以使用語法顏色偏好設定面板(請見下方)來變更語法重點標示顏色。從 R.APP 1.17 版開始,會使用延遲語法重點標示,表示影響整個檔案的變更(例如輸入單引號或雙引號)不再套用至整個檔案,而只會套用至幾行。這種暫時狀態通常會在關閉引號時復原,但在某些罕見情況下,它可能會持續到對冒犯引號的第一行進行變更為止。不過,延遲重點標示在編輯大型檔案時會大幅提升速度。


下一頁:,上一頁:,向上:一般功能  

2.4.6 編輯器(內部和外部)

預設情況下,使用的編輯器會整合到 R.APP,這是 R 的 macOS GUI。它是一個相對簡單的多文件編輯器,支援上面列出的功能。此外,還有兩個強大的指令可用於將正在編輯的檔案全部來源化 (Command-E) 或將目前的選取範圍來源化到 R (Command-Return)。使用 Redit() 函數,可以在 R 等待編輯階段結束的同時編輯 R 物件或檔案。

可以將所有 R 要求「重新導向」到 R.APP 外部執行的外部編輯器。在這種情況下,如果使用 edit(),就無法讓 R 繼續等待。使用 AppleScript 可以輕鬆實作類似 Command-ECommand-Return 的功能。


下一頁:,上一頁:,上一層:一般功能  

2.4.7 編輯器說明

編輯器包含一個輕量級的說明系統,以搜尋欄位的形式置於工具列中。可以使用精確或近似搜尋。


下一頁:,上一頁:,上一層:一般功能  

2.4.8 拖曳和放置

R.APP 未執行時將目錄拖曳到 R.APP 圖示上,會啟動 R.APP 並設定工作目錄。預設情況下,會從這個工作目錄中擷取 .RData 和記錄檔(預設名稱 .Rapp.history)。如果在 R.APP 未執行時將檔案拖曳到 R.APP 圖示上,R.APP 會啟動,檔案會復原(如果它是已儲存的工作空間)、來源化到 R.APP 或在選取的編輯器中開啟。檔案是開啟還是來源化,是由啟動偏好設定窗格中的偏好設定指定的。

注意:此時在 R.APP 完成載入之前,在編輯器中開啟檔案會導致 R.APP 崩潰。

R.APP 正在執行時,拖放目錄會更新工作目錄。拖放檔案會載入或在所選編輯器中開啟檔案。如果 R.APP 未在執行中,則雙擊與 R 連結的檔案(「使用開啟...」),R.APP 會啟動,且檔案會在編輯器中載入或開啟。如果 R.APP 正在執行中,則檔案會在編輯器中開啟。


下一頁:,上一頁:,向上:一般功能  

2.4.9 說明系統

說明畫面允許使用者回到或前進到先前的說明頁面。可以列印說明頁面。如果找不到說明主題,會出現一個快顯視窗,允許離開說明搜尋或將搜尋擴充為模糊/近似搜尋。


下一頁:,上一頁:,向上:一般功能  

2.4.10 歷史記錄

R.APP 使用與 R 建立的歷史記錄檔案相容(超集)的歷史記錄檔案。多行支援仍可在 R.APP 內部使用。在編輯 R 程式碼時使用 Command-Return 功能時,多行特別有用。匯入和匯出允許儲存和匯入 Mac OS Finder 中可見檔案的歷史記錄。多行會保留。這可透過啟動偏好設定面板設定。保留的歷史記錄條目預設數量為 250。可以進行各種歷史記錄條目清除模式。至少建議選取「清除歷史記錄條目」。可以選擇移除重複條目和清除註解。

注意:命令列 R 會將歷史記錄儲存在通常稱為 .Rhistory 的檔案中。建議為 R.APP 歷史記錄檔案使用不同的名稱,而預設名稱為 .Rapp.history

請注意,函數 loadhistory()savehistory(),因此還有 history() 目前在 R.APP 中不受支援。


上一個:,上層:一般功能  

2.4.11 驗證和 .libPaths

官方 CRAN 二進位檔案以預先封裝的方式提供,讓管理員擁有足夠的權限來更新 R 並在系統範圍內安裝套件。然而,預設的 Unix 組建需要 root 驗證才能安裝套件和其他管理工作。由於無法以 root 身分執行 GUI,因此我們提供驗證從 GUI 發出的系統命令的可能性。驗證需要管理員登入,並導致所有後續的系統命令以 root 身分執行。請小心使用!

為了讓非管理員維護自己的套件組,R.APP 選擇性地將 ~/Library/R/x.y/library 加入 .libPaths(請參閱啟動偏好設定,x.y 表示沒有修補程式層級的 R 版本)。可以使用套件安裝程式安裝套件,無論是全球(僅限管理員使用者)或僅限目前使用者。(這是主 R 文件中所述個人函式庫目錄的相同機制,但其位置特定於 macOS 上類似的 CRAN 組建的 R。)

請注意,僅在啟用對應的偏好設定選項時才會使用使用者本地的套件。管理員使用者的預設值是使用系統範圍的目錄,對於非管理員使用者,將使用個人函式庫目錄。


下一個:,上一個:,上層:R.app  

2.5 選單


下一頁:,上一頁:,上層:選單  

2.5.1 應用程式選單

應用程式選單是主 Apple 選單後的第 1 個選單:標籤為 R

您可以透過此選單存取三個項目:1. 關於對話方塊,會告訴您目前使用的是哪個版本的 R,2. 檢查更新,會在 CRAN 上搜尋是否有 macOS 的 R 二進位發行的新版本(您需要網路連線),3. 您可以存取偏好設定(請參閱 偏好設定)。


下一頁:,上一頁:,上層:選單  

2.5.2 檔案選單

此選單提供標準功能。開啟指令與動作來源 R 程式碼相關聯,這表示您可以選擇一個檔案(為腳本),然後會在 R 中執行。這是 R 來源指令 source 的介面。


下一頁:,上一頁:,上層:選單  

2.5.3 雜項選單

除了標準功能外,此選單中唯一相關的項目是編輯物件,它是 R edit 函數的介面。


下一頁:,上一頁:,上層:選單  

2.5.4 雜項選單

透過這個選單,您可以載入和儲存 R 主控台中輸入的命令記錄,或檢視目前內容。您也可以變更目前的工作目錄,讓 R 顯示目前的工作目錄或將其設定回啟動目錄。從 R 的 1.9.0 版本開始,目前的工作目錄也會顯示在主視窗列上。


下一頁:,上一頁:,上一層:選單  

2.5.5 工作區選單

在這裡,您可以找到用於管理 R 中的工作區的自我解釋選單項目。您也可以透過指定檔案名稱來載入和儲存工作區。這些都是 loadsave R 命令的介面。唯一與這個 GUI 相關的重要項目是 瀏覽工作區,它會呼叫 R 中的 browseEnv() 函式。這會開啟一個視窗,其中包含工作區中物件的摘要說明。遞迴物件(例如清單、資料框等)可以展開(但僅限一層)。


下一頁:,上一頁:,上一層:選單  

2.5.6 套件選單

使用這個選單,您可以存取系統上已安裝的套件和資料集清單,以及 CRAN 或 Bioconductor 網站上的清單。

使用前兩個選單,您可以載入和移除工作區中的套件和資料集。讓我們從 套件管理員 開始。這會開啟一個視窗,其中顯示多個欄位。對於系統上的每個套件,您可以看到一個核取方塊、套件的目前狀態(已載入/未載入)、其名稱和套件說明文字。您可以使用核取方塊來選取/取消選取您要的套件。在關閉視窗時,已勾選的套件將會載入,而未勾選的套件(如果已載入)將會移除(但並非完全移除,因為在 macOS 上您無法完全卸載動態函式庫)。

資料集管理員功能表也適用於資料集。

您可以在二進制或原始碼格式中取得或更新 CRAN 套件。macOS 提供 CRAN 套件的每日建置。如果您不知道如何從原始碼建置 R 本身,您可能無法自行從原始碼建置套件。在這種情況下,您應該始終選擇二進制選項。這些二進制套件絕對適用於您在 CRAN 上找到的 macOS R 發行版本,即使它們可能適用於其他 R 預建版本也不例外。

當您嘗試從 CRAN 安裝套件時,R 首先嘗試連線至網路,以下載可用套件清單。然後會開啟一個視窗,類似於套件管理員中的視窗,唯一的差別是每個套件還包含有關系統上已安裝套件版本(如有)和 CRAN 上可用的預建套件版本資訊。當您關閉視窗時,將會下載所選套件。

相同的策略適用於 Bioconductor 功能表項目,其中包含一些 Bioconductor 套件管理方式的典型選項。

由於某些原因,您可能會在某個本機磁碟機上擁有想要安裝的套件(二進制或原始碼形式),甚至是一個包含套件原始碼的目錄。您可以使用最後一個功能表來執行安裝套件的任務。以目錄形式擁有套件通常適用於自行開發套件的人員。

請注意,不包含需要編譯的 C、C++、Fortran … 程式碼的套件,可以使用其來源編譯,而無需其他工具。

有關此主題的更多資訊,請參閱 如何安裝套件


上一個:,上層:功能表  

2.5.7 說明功能表

使用此功能表,您可以開啟線上手冊(R 說明)、閱讀此常見問答集,並檢閱 macOS 中 R 的最新變更、錯誤修正和新功能(此版本的新功能)。此外,還有 R 說明help.search 函數以及 範例函數的介面。


下一個:,上一個:,上層:R.app  

2.6 偏好設定

您可以透過偏好設定來設定 R GUI 的幾個方面。當 R 主控台開啟時,您可以透過應用程式功能表存取偏好設定視窗。


上一個:,上層:偏好設定  

2.6.1 啟動

拖曳與放置區段定義 R 啟動期間的拖曳與放置行為。選項包括在編輯器中開啟檔案或來源檔案。預設為來源檔案。預設函式庫路徑區段啟用,在 R 下次啟動時,將目錄(例如 ~/R/Library)新增至函式庫搜尋/安裝路徑。初始工作目錄區段可用於強制執行初始工作目錄。如果未指定目錄,則此目錄將用作預設值。變更按鈕允許選擇新的目錄。始終套用選取將強制執行指定的初始啟動目錄。歷程記錄區段控制啟動時讀取歷程記錄檔案。如果選取,R 將在啟動時讀取歷程記錄檔案。R 歷程記錄檔案欄位用於讀取和儲存歷程記錄。可以編輯此欄位以允許選取以句點開頭的檔案(例如 .Rapp.history)。如果您希望歷程記錄檔案與您選取的工作目錄相同,請指定固定路徑(例如 ~/.Rapp.history)。預設按鈕將歷程記錄檔案名稱重設為其預設值。歷程記錄處理區域允許設定要保留在歷程記錄中的最大項目數、移除重複項目、清除歷程記錄項目(在使用 Command-Return 提交多行時移除空白行時非常有用)以及在將項目新增至歷程記錄之前移除註解。


下一頁:,上一頁:,上一層:啟動  

2.6.1.1 編輯器偏好設定

如果選擇內建編輯器,則允許啟用/停用語法著色、大括號反白顯示和顯示行號。如果選擇外部編輯器,則允許指定哪一個外部編輯器。該編輯器將用於所有編輯功能。它作為一個獨立的應用程式執行。使用外部編輯器表示 R 永遠不會在編輯時等待(例如,edit(A) 會立即傳回並在外部編輯器中開啟 A。Command-E 和 Command-Return 等功能需要透過其他方式實作,例如 AppleScript。外部編輯器可以是任何應用程式(例如 SubEthaEdit、TextWrangler、BBEdit、Smultron 等),或可以透過 shell 指令碼啟動(例如,請參閱 or smultron,這兩個都能更佳控制如何啟動編輯器)。


下一頁:,上一頁:,向上:啟動  

2.6.1.2 語法色彩

啟用以選擇語法色彩。


下一頁:,上一頁:,向上:啟動  

2.6.1.3 主控台色彩

啟用以選擇 R 主控台中輸入/輸出的色彩。


上一頁:,向上:啟動  

2.6.1.4 Quartz 視窗

目前 Quartz 偏好設定面板並未被使用。


上一頁:,向上:R.app  

2.7 R.app 錯誤

在 Unix 系統上,可以使用函數 bug.report() 產生錯誤報告。或者,可以將錯誤報告提交到網頁 http://bugs.R-project.org/

在您提交錯誤報告之前,請嘗試使用 R.APPR 的主控台版本(如果適用)來重現錯誤。如果錯誤是 R.APP 特有的,請改為將錯誤報告給郵件清單 R-SIG-Mac@R-project.org。請務必提到確切的 R.APP 版本,並包含 sessionInfo() 的輸出。

在任何情況下,如果發生崩潰,請報告 R.bin 和/或 R.app 應用程式的 crash.log。您可以使用位於 /Applications/Utilities 內的 Console.app 取得這個 crash.log(在崩潰時,在 R 主控台的崩潰選單中選取「1」以產生崩潰報告(如果您看到那個選單))。


下一步:,上一步:,向上:macOS 上的 R 常見問答集  

3 如何安裝套件

您有幾個選項可以在您的系統上安裝新套件。我們在此只討論標準 R 函數(例如 install.packages())的 GUI 介面。有關 R 函數,請參閱標準 R 文件。


下一步:,上一步:,向上:如何安裝套件  

3.1 我可以使用 GUI 安裝哪種類型的套件

GUI 提供直接存取/CRAN、Bioconductor 儲存庫或自訂儲存庫中套件的下載/安裝。您也可以從本機檔案安裝套件,如下所述,可以是二進位或原始碼套件。否則,您可以使用適當的 R 指令 (請參閱 install.packages) 從上述提及位置以外的特定位置安裝套件。


3.2 套件的安裝

macOS 的 R 辨識兩種形式的套件:二進位套件和原始碼套件。

二進位套件是即用型態的 R 套件,因此不需要其他工具即可使用。二進位套件是針對特定 R 版本作業系統。 CRAN 和 Bioconductor 儲存庫提供最近發布的 R 版本的二進位形式 R 套件。與其他 Unix 系統不同,macOS 的 CRAN R 預設安裝二進位套件,亦即 install.packages 會先尋找二進位儲存庫,除非另有指示。

原始碼套件是通用的,可以在 R 支援的任何平台和作業系統上使用,但在使用之前需要處理和/或編譯。這可能需要其他工具,請參閱 原始碼套件的安裝 以取得詳細資訊。對大多數使用者而言,二進位套件就已足夠 (如果可用且為最新版本)。

在 macOS 上,套件可以透過三種方式安裝

  • 使用 R.APP GUI 中的套件管理員 (建議大多數 Mac 使用者使用)
  • R 中使用 install.packages 指令
  • 在 shell(又稱 終端機)中使用 R CMD INSTALL 指令

後兩種方法在所有 Unix 系統中都通用,因此在 R 的一般文件中有說明。以下我們將專注於使用 套件安裝程式

如果您決定安裝套件,您應該使用 GUI 的 套件與資料 選單,特別是子項目 套件安裝程式。選擇存放庫、套件類型(二進位或原始碼),然後按一下 取得清單。這會透過網路連線到存放庫,並列出所有可供安裝的套件。清單會告訴您套件是否已安裝在您的系統上、CRAN 上可取得的套件版本,以及已安裝套件的版本(如果已安裝)。

您可以使用搜尋欄位,將套件清單縮小到符合您的搜尋條件的套件。此外,您可以使用搜尋清單選單,僅列出已安裝在您系統上的套件,這對於比較可取得和已安裝套件的版本很有用。最後,您可以篩選出先前 R 版本已安裝的套件,以允許簡單升級。

選取您要安裝的任何套件,然後按一下 安裝 按鈕。您可以在 R 主控台中追蹤安裝進度。一旦安裝了必要的套件,清單會重新載入,以反映新安裝套件的版本。

如果您要將所有套件更新到最新版本,請選取要使用的套件存放庫,然後按一下 全部更新R 會自動判斷可以更新的套件清單,並提供您要更新的套件選項。

您也可以自行從網際網路上下載任何其他套件,並決定從原始碼安裝它。在這種情況下,請從左上角清單中選取其中一項本機條目,然後按一下安裝按鈕(現在已啟用)。

也可以透過選取其他存放庫來源,從其他存放庫安裝套件。在相鄰欄位中輸入存放庫 URL。請注意,目前套件安裝程式假設自訂存放庫會同時為原始碼和二進位套件維護適當的階層,就像 CRAN 在使用其他存放庫時所做的那樣。如果您的自訂存放庫是扁平的,請在安裝類型清單中選取其他目錄 URL


下一步:,上一步:,向上:如何安裝套件  

3.3 原始碼套件安裝

不包含已編譯程式碼的原始碼套件(少數例外情況除外)可以在沒有其他工具的情況下安裝。

包含已編譯程式碼(或一些包含 Unix 指令碼)的套件需要用於建置 R 本身的工具,這些工具會在「R 安裝和管理手冊」中討論,而且需要在 R.APP 或命令列 R 中看到的「PATH」中。對於 R.APP,您可能需要新增例如 /usr/local/bin,而且通常最方便使用命令列 R

如果使用 R 的 CRAN 二進位安裝,編譯器可能不在相同位置,或與 CRAN 建置機器上的名稱不同。查看檔案 /Library/Frameworks/R.framework/Resources/etc/Makeconf,其中將包含類似下列各行的內容

CC = clang -mmacosx-version-min=10.13
CXX = clang++ -mmacosx-version-min=10.13 -std=gnu++14
FC = gfortran -mmacosx-version-min=10.13
OBJC = clang -mmacosx-version-min=10.13
OBJCXX = clang++ -mmacosx-version-min=10.13

(對於 Intel,ARM 類似)。您可以編輯該檔案,或覆寫檔案 ~/.R/Makevars 中的設定:請參閱「R 安裝和管理手冊」的「自訂套件編譯」部分。


上一個:,上層:如何安裝套件  

3.4 我安裝的套件在哪裡?

套件的主要函式庫位於 R.framework 內部(在 /Library/Frameworks/R.framework/Resources/library 中)。此函式庫包含與 R 一起發布的套件(基本和建議的套件)。只有管理員可以在此系統範圍目錄中安裝套件。請注意,此目錄是 R 版本特定的。使用者可以選擇在他們的 ~/Library/R/x86_64/x.y/library 目錄中安裝個人套件,其中 x.y 表示沒有修補程式層級的 R 版本(例如 3.0)– 請參閱 R.APP 中的啟動偏好設定。(對於 ARM,請用 arm64 取代 x86_64。)

套件安裝程式會根據安裝目標設定執行安裝到任一位置。管理員使用者的預設值是系統範圍安裝套件,而一般使用者的預設值是他們的個人函式庫樹。

如果您使用 install.packages R 函式而不是套件安裝程式,則會套用一般 Unix 行為(有關詳細資訊,請參閱說明頁面)。對於預設設定,這表示套件會根據啟動偏好設定安裝。您可以透過發布以下指令來查看目前的預設值

.libPaths()

下一個:,上一個:,上層:macOS 版 R 常見問題集  

4 R 和外部應用程式


下一頁:,上一頁:,向上:R 與外部應用程式  

4.1 AppleScript 支援

R 部分支援 Apple-Scripts。目前 R 可被呼叫,並要求從 AppleScript 程式碼執行命令。以下是與 R 互動的範例程式碼。它先呼叫 R,然後使用 cmd applescript 命令將命令傳送至 R

set CommandLine to "R.Version()"
try
	tell application "R"
		activate
		with timeout of 90000 seconds
			cmd CommandLine
			cmd "Sys.getenv()"
			cmd "print(\"HelloWorld!\")"
		end timeout
	end tell
end try

在上述範例中,cmdR 字典中(唯一)的 applescript 命令,用於指示 R 在 R 主控台中執行 R 命令。語法為

cmd <command string>

其中命令字串必須置於引號中。實際上,命令的輸出並非傳送回呼叫 R 的應用程式,而是直接傳送至 R 主控台。

有一些問題。第一個問題是,如果 R 尚未執行,則需要一些時間(視電腦速度而定)才能啟動。同時,程式碼會在不等待的情況下傳送命令,因此可能會發生 R 錯失一些命令的情況,也就是說,這些命令在 R 準備接收 applescript 命令之前就已送達。第二個問題是,applescript 可能呼叫錯誤版本的 R。如果您的系統中安裝了舊版本的 R(例如舊的 Carbon R),就會發生這種情況。

以下為一個範例程式碼,說明如何要求 R 使用檔案對話方塊來 source 檔案。

set file_to_source to (choose file with prompt "Choose file to source") as alias

try
	tell application "R"
		activate
		with timeout of 90000 seconds
			cmd "source(\"" & file_to_source & "\")"
		end timeout
	end tell
end try

下一頁:,上一頁:,向上:R 和外部應用程式  

4.2 外部編輯器

R 接受 Apple Event 命令 open。這表示外部編輯器可以透過檔案傳送 R 程式碼片段,讓 R 執行。這是 Alpha X 中 R-Tcl 模式所採用的方法(請參閱 http://www.kelehers.org/alpha/)。


上一頁:,向上:R 和外部應用程式  

4.3 Finder 動作

將檔案拖曳到 R 圖示上,會讓 R 透過 source R 命令來取得此檔案的原始碼,或者,如果檔案是 R 影像資料檔案 RDX1 或 RDX2(通常是副檔名為 .rda.RData 的檔案),資料會載入工作區,而且工作區中所有同名的物件都會在沒有通知的情況下被覆寫。載入資料檔案等同於 R 命令 load。目前無法控制檔案類型,也就是說,拖曳錯誤的檔案(例如不是 R 指令碼或影像資料的檔案)只會產生錯誤。由使用者自行決定要 做正確的事

如果 R 尚未執行,此動作會讓 R 啟動。


下一頁:,上一頁:,向上:macOS 上的 R 常見問答集  

5 Quartz 裝置

quartz() 裝置是 Mac OS X 上 R 的原生圖形裝置。其名稱源自 Apple 的 Quartz 技術,本質上類似於 PDF 呈現。

quartz() 裝置可以用在 R.APP 或是在 Mac 主控台執行合適的 R 編譯版本中。在支援的情況下,它是預設的圖形裝置。


下一頁:,上一頁:,向上:Quartz 裝置  

5.1 互動模式

Quartz 裝置允許互動。你可以使用 identifylocator 函數。要中斷序列,你應該按右鍵或按住 Control 鍵並按一下 ESC 鍵。


下一頁:,上一頁:,向上:Quartz 裝置  

5.2 儲存圖片

你可以透過 R 選單將 Quartz 裝置視窗的內容儲存到 PDF 檔案中,前提是裝置視窗有焦點。這是一種簡單的方法,可以將高品質的圖形從 R 匯出到 macOS 上的其他應用程式,因為圖形是基於 PDF(幾乎所有可用的應用程式都是如此)。對於其他解決方案,請參閱(請參閱 將圖片複製到剪貼簿)和 quartz.save 函數。


上一頁:,向上:Quartz 裝置  

5.3 將圖片複製到剪貼簿

你可以將 Quartz 裝置視窗的內容複製到剪貼簿中,以便將產生的圖片貼到其他應用程式中。剪貼簿將包含 Quartz 裝置視窗的 PDF 版本和位元圖版本。將使用哪個版本取決於貼上的應用程式,大多數現代應用程式會偏好品質較高的 PDF 版本,因為它支援向量圖形。


下一頁:,上一頁:,向上:macOS 版 R 常見問題集  

6 Tcl/Tk 問題

透過 CRAN 取得的每個 R 二進制發行版都建置為使用 Tcl/Tk 的 X11 實作。當然,必須先啟動 X 視窗伺服器:這應會在 macOS 上自動發生,只要已安裝該伺服器(需要從 http://xquartz.macosforge.org 進行個別安裝)。第一次在 X 伺服器中執行工作時,可能會有一段長時間的延遲,因為正在建置字型快取;啟動伺服器可能需要數秒鐘。

如果您不喜歡 X11 樣式的小工具,而且使用命令列 R,您可能想使用 Tcl/Tk 的 Aqua 版本來建置 R(請參閱「R 安裝與管理手冊」)。不過,請注意,此類建置在 R.APP GUI 中使用時無法運作。


下一頁:,上一頁:,上一層:macOS 的 R 常見問題  

7 R.app 的國際化

RR.APP GUI 支援國際化。這表示訊息和 GUI 元素可以翻譯成各種語言,其中包括這一點。R.APP 會自動偵測「系統偏好設定」中「語言與地區」區段中的使用者設定,並使用該資訊提供已翻譯的訊息和 GUI(如果有的話)。

如果您使用非標準設定(例如語言與格式不同),您可以覆寫自動偵測功能,方法是設定「force.LANG」預設設定,例如

defaults write org.R-project.R force.LANG en_US.UTF-8

Terminal 中執行時,它將強制執行美式英語設定,而不管系統設定為何。如果您不知道 Terminal 是什麼,您可以改用這個 R 指令

system("defaults write org.R-project.R force.LANG en_US.UTF-8")

但不要忘記之後結束 R 並重新啟動 R.APP。請注意,您必須始終使用當地語言的「.UTF-8」版本,否則 R.APP 將無法正常運作。

預設情況下,R.APP 會對新建立的文件和主控台使用 UTF-8。開啟新文件時,R.APP 會假設使用 UTF-8,而且只有當文件違反 UTF-8 規則時,它才會嘗試回退到舊編碼,通常是 Mac Roman。

如果您有興趣將 R.APP GUI 翻譯成其他語言,請閱讀 http://developer.r-project.org/Translations30.html 上的開發人員文件。


下一頁:,上一頁:,向上:R for macOS 常見問答集  

8 其他資源

以下是幾個可能對 macOS 和/或開發人員有用的參考。


下一頁:,上一頁:,向上:其他資源  

8.1 Apple Developer Connection

Apple Developer Connection(可透過 http://developer.apple.com 存取)是 Apple 產品(作業系統、硬體、軟體)開發人員的主要資訊來源。您可以免費訂閱 ADC 並取得 Apple 最新且最新的工具(例如編譯器):然而最近這些工具已透過 App Store 發布。


上一個:,上層:其他資源  

8.2 macOS 的 R 開發人員頁面

有一個頁面專門介紹 macOS 的 R 開發版本。此頁面位於 http://mac.R-project.org/,由 Simon Urbanek 維護。它包含 RR.APP 的最新夜間版本,以及建置 R 所需工具的資訊。


下一個:,上一個:,上層:macOS 的 R 常見問答集  

9 致謝

特別感謝 Jan de Leeuw、Byron Ellis 和 Thomas Lumley(順序不分先後)。最後但並非最不重要的是 Apple,感謝其出色的作業系統和 GUI。


上一個:,上層:macOS 的 R 常見問答集  

10 其他問題


10.1 如何讓每個工作階段都有自己的 .Rprofile?

您可以在偏好的最愛工作階段目錄中撰寫 .Rprofile 檔案,並使用偏好設定變更啟動工作目錄(請參閱目前的啟動工作目錄)。


10.2 如果我將檔案拖曳到 R 圖示上會發生什麼事?

在這種情況下,R 會嘗試將此檔案作為來源或載入影像資料檔案(請參閱Finder 動作)。如果 R 尚未執行,則會啟動它。


10.3 如何中斷冗長的運算或輸出?

R.APP 中,您可以使用工具列上的停止按鈕或主控台視窗中的 ESC(跳脫)鍵來中斷正在執行的運算或輸出。

對於命令列版本,按 Ctrl-c 可達成相同效果。兩個應用程式都尊重 INT 訊號,亦即您可以在個別終端機視窗中輸入以下內容以取消所有 R 計算

killall -INT R

(可能會有些許延遲,因為 R 會排隊回應中斷,直到程式碼中的安全點為止。)

不過,如果執行的程式碼未檢查中斷(使用「R_CheckUserInterrupt」),則可能無法停止 R。在這種情況下,可能值得提醒套件維護者允許中斷(如果合適的話)。


10.4 啟動 R 時,我看到錯誤訊息!

如果您在 R GUI 啟動時看到錯誤訊息,且文字中任何地方包含 Library/InputManagers,表示您的系統中安裝了一些有問題的 haxxies。這些訊息並非來自 R,所以別怪我們。位於您家目錄(或系統)的 Library/InputManagers 中的套件是會載入到您啟動的每個 Mac 應用程式中的 hack。在大部分情況下,您不會看到它們崩潰,因為大部分應用程式不會顯示主控台輸出,但 R 會顯示,因此那些 hack 造成的錯誤都會變得可見。最簡單的補救方法是刪除所有有問題的套件(可能是整個 Library/InputManagers 資料夾),並取得修正版本的 hack(如果您需要的話)。造成 hack 有問題的最常見原因是系統升級(例如您取得新的 Mac,而且您傳輸包含這些與您的新 Mac 不相容的 hack 的設定)。

如果您想要停用 GUI 中的所有外部錯誤輸出,請使用

defaults write org.R-project.R 'Ignore stderr' YES

在終端機中。不過,請注意這會停用所有外部程式(包括套件安裝或system指令)的錯誤輸出。


10.5 使用哪個 BLAS,以及如何變更?

BLAS 函式庫由 R 使用,這取決於 R 編譯的方式(詳細資訊請參閱「R 安裝和管理」手冊)。從 CRAN 提供的目前 R 二進位檔提供基於 vecLib 的 BLAS 和隨附 R 的參考 BLAS。vecLib 是 Apple 的 Accelerate 架構的一部分,它提供針對 Mac 硬體最佳化的 BLAS 實作。雖然速度很快,但它不在我們的控制之下,而且可能會提供不準確的結果。

CRAN 二進位檔使用 --enable-BLAS-shlib 選項,並提供兩個 Rblas 共用函式庫:使用 vecLib BLAS 的 libRblas.vecLib.dylib 和使用 R 的參考 BLAS 的 libRblas.0.dylib。符號連結 libRblas.dylib 決定使用哪一個。目前預設使用 R BLAS:建議用於精確度。

若要變更使用的 BLAS,請相應變更 libRblas.dylib 符號連結 – 例如在終端機中

cd /Library/Frameworks/R.framework/Resources/lib

# for vecLib use
ln -sf libRblas.vecLib.dylib libRblas.dylib

# for R reference BLAS use
ln -sf libRblas.0.dylib libRblas.dylib

此功能僅存在於 R CRAN 二進位檔中。通常從來源編譯的 R 將只有一個上述 BLAS 函式庫,對應於使用的組態選項。

使用的 BLAS 函式庫顯示在 sessionInfo() 中。


10.6 安裝套件時我什麼都看不到!

套件安裝期間不會持續產生輸出。R.APP 會盡力盡快顯示輸出,但例如文件指令碼在完成前不會印出任何內容。

另請注意,R.APP 的開發版本會將輸出傳送至錯誤主控台,而非螢幕。在這種情況下,您可能想要查看 主控台 應用程式。


10.7 為什麼影像繪圖中有微弱的線條?

當根據 image() 函數繪製的繪圖匯出至 PDF 時,預覽會在建立影像的矩形邊緣顯示非常微弱的網格線。這些線條是預覽中因抗鋸齒和次像素繪製結合而產生的繪製偽影。它們並非 PDF 的真正一部分(放大後會發現它們並非會隨著放大而變大的真實物件),因為矩形被定義為區域的無縫覆蓋。透過在預覽中停用抗鋸齒,可以避免這種效果。

我們在螢幕上繪製時會在 Quartz 中修正此效果,方法是將所有矩形對齊至螢幕的像素邊界,但預覽不會這麼做。

任何具有相鄰填滿多邊形(無邊框)的繪圖都會發生相同的效果。


10.8 為什麼 R GUI 不支援鍵盤快速鍵 XYZ?

R.APP GUI 使用 Apple 框架進行文字編輯,因此文字檢視(主控台、編輯器等)的行為與其他應用程式一致,並允許非常靈活的自訂。例如,如果您不滿意 macOS 提供的預設 Emacs 類似鍵盤繫結,Apple 允許您任意延伸它們。更多詳細資訊,請參閱 Apple 在 鍵盤繫結 上的文件。還有許多第三方頁面關於鍵盤繫結自訂,搜尋 StandardKeyBinding.dict


10.9 CRAN 建置與一般建置之間的差異是什麼?

R 的 CRAN 建置與 R 的一般建置(即,單純的 ./configure && make && make install)略有不同。所有從原始碼編譯建置的預設套件類型為 "source",而 CRAN 使用二進位套件。只有 CRAN 建置保證與 CRAN(或 Bioconductor)上的套件二進位檔相容。 CRAN 使用的確切旗標可在 CRAN 建置系統的 R SVN 儲存庫中以 conf.xxx 檔案取得。對於 R 4.0.0 及更高版本,這是 https://svn.r-project.org/R-dev-web/trunk/QA/Simon/R4。此外, CRAN 建置包含在框架內執行 R 所需的函式庫。 CRAN R 和套件使用的靜態函式庫可以在 https://mac.R-project.org/bin 取得


10.10 為什麼 R 架構中的 R.home() 沒有版本控制?

在 R 的命令列版本中,R.home() 永遠指向 R 架構內的 Resources 目錄符號連結,而該符號連結指向 Versions/Current/Resource,後者則指向實際的家目錄,例如 Versions/4.2/Resources 等版本控管目錄。這是 macOS 中架構版本控制運作的方式,由 Apple 定義(請參閱 Framework Anatomy)。

儘管可以在 R shell 腳本中將 R_HOME 直接設定為版本控管路徑(因此可以在不變更符號連結的情況下並行執行不同版本),但潛藏著許多風險,因此我們不建議這樣做。其中一個問題是無法從原始碼建置套件。連結器總是連結到架構的目前版本,因此只有目前活躍的 R 版本才能編譯套件。此外,套件可能在安裝時使用了 R.home() 的值,因此在設定不正確的情況下可能無法運作。最後,如果此類 R 啟動腳本被複製,而 R 版本變更,它將停止運作。


10.11 R.app GUI 在啟動時當機!

如果你的 R.APP GUI 在啟動時崩潰,有兩個常見的原因:已儲存的工作區或已損毀的記錄檔。(另一個原因是 R.APPR 之間不匹配,如果其中一個已更新)。

已儲存的工作區可能包含會隱式載入套件的指令,而這些指令又會觸發套件中的錯誤或提供不正確的起始值給 R(特別是如果它使用另一個 R 儲存)。請嘗試移除或重新命名你的工作區,它稱為 .RData。如果你沒有變更你的啟動設定,你可以使用

mv ~/.RData ~/workspace.RData

將它移開,並稍後使用 load("~/workspace.RData") 手動載入以進行檢查。

在啟動時崩潰的第二個最常見原因是未透過 R.APP GUI 建立的記錄檔。同樣地,將它移開以查看是否為此問題:對於預設檔,可以透過

mv ~/.Rapp.history ~/history.txt

執行此動作。儘管我們嘗試從無效的記錄檔中復原,但它們仍可能因為 macOS 中字串內部處理的問題而導致 R.APP 崩潰。我們目前正努力防止此問題發生。

如果你已執行上述兩個步驟,但 R.APP 仍然崩潰,請在崩潰後從選單中選取「1」(如果你在主控台中取得崩潰選單),並將產生的崩潰報告傳送給我們(請參閱上述 R.app 錯誤)。


10.12 為什麼 GUI 沒有儲存我的記錄?

R.APP 預設會將記錄儲存在 .Rapp.history 檔中,而命令列 R 會使用 .Rhistory。因此,已儲存的記錄只會在後續的 R.APP 工作階段中使用,而不會在命令列 R 中使用,反之亦然。

請注意,在 R.APP 中呼叫 savehistory() 目前不會儲存 R.APP 工作階段的記錄:這表示 history() 會顯示一個空白視窗。


10.13 我在 GUI 中收到「找不到指令」,但在終端機中卻可以運作 – 為什麼?

在執行系統指令時(例如直接透過 system 或間接透過呼叫其他程式(例如 install.packages)的函式),殼層尋找程式的路徑是由 PATH 環境變數控制。對於從互動式殼層啟動的 R 和在 GUI 中啟動的 R,此變數的設定可能不同。您可以使用 Sys.getenv("PATH") 來驗證目前的設定。

當 R 從殼層啟動時(例如在終端機的命令列中),它會繼承該殼層的設定。這些設定通常會由殼層特定的設定檔修改,例如 .profile.bashrc。這些設定只適用於殼層,而不適用於整個系統。此外,某些安裝程式(例如 MacTeX)會修改全域殼層設定,讓使用者在命令列中使用起來更方便,但同樣地,這些設定不適用於非從殼層啟動的程式 – 例如 GUI。請參閱 Apple 技術問答集 QA1067,了解 Apple 對此主題的說明。

若要標準化 R 中的 PATH 設定,您可以在 .Renviron 檔案中設定它(在您的家目錄中 – 請參閱 R 中的 ?Startup,了解 R 在啟動時如何使用設定檔的詳細資訊)。此設定將套用於 R,無論它是如何啟動的。如果您希望透過 Sys.getenvSys.setenv 選擇性修改現有的 PATH 變數,您也可以在 .Rprofile 中加入更精細的建構。


10.14 在 Quartz 繪圖中看不到文字!

這通常表示系統中的字型已損毀。開啟「字型冊」應用程式(位於「應用程式」中),並檢查您正在使用的字型(例如,Quartz 目前預設的字型為「Arial」)。損毀的字型不會有字形(文字不會正常顯示),請移除這些字型。


10.15 無法將偵錯器附加至 R

使用 Apple 安裝程式安裝的 R 程序無法附加偵錯器。這是 Apple 出於安全考量而引入的限制。自 2020 年 1 月起,Apple 要求所有經過公證的應用程式使用「強化執行時期」https://developer.apple.com/documentation/security/hardened_runtime,而其中一項影響是偵錯器無法竄改此類程序。因此,官方的 R 安裝程式必須使用強化執行時期,因為 Apple 不再允許安裝未經公證的軟體。

若要除錯 R 程式碼或套件,可以使用不使用強化執行時間且未公證的 R 二進位檔。此類二進位檔可在 https://mac.R-project.org/ 的 tar 檔案中取得,並可透過解壓縮到 / 來安裝,例如:

curl -LO http://mac.r-project.org/high-sierra/R-4.2-branch/x86_64/R-4.2-branch.tar.gz
tar fxz R-4.2-branch.tar.gz -C /

如果您不是管理員,可能必須使用 sudo tar ...

注意:自 4.2.0 版起,R 版本在強化執行時間中包含允許除錯的權利,因此上述問題不應發生在 R 4.2.0 版以後的 R 版本中。