從原始碼安裝 R 包

Jesse John 2023年1月30日
  1. 使用 install.packages() 函式從原始碼安裝 R 包
  2. 關於 R 包
  3. 從本地原始檔安裝 R 包
  4. 從 CRAN 安裝舊版本的 R 包
  5. 從原始碼安裝任何 R 包
  6. まとめ
從原始碼安裝 R 包

R 包以原始碼形式建立和分發。但是,某些包包含需要編譯的 C、C++ 或 Fortran 程式碼。

因此,二進位制包通常可供 Windows 和 macOS 使用者使用和安裝。本文將學習如何使用 install.packages() 函式從一個源安裝兩個包,一個來自本地檔案,一個來自 CRAN。

在實踐中,從源安裝包可能並不順利。在某些情況下,它可能根本不起作用。

因此,我們將從有關 install.packages() 函式和 R 包的一些一般細節開始。如果我們遇到困難,這些資訊可能會對我們有所幫助。

使用 install.packages() 函式從原始碼安裝 R 包

通常,我們使用帶有單個引數的 install.packages() 函式:我們要安裝的包的名稱,用雙引號括起來。例如,install.packages("package_name")

該功能檢查作業系統 (OS),安裝的 R 版本,並在 CRAN 上安裝最新版本的軟體包,如果它與我們的作業系統和 R 版本相容。

對於 Windows 和 macOS 作業系統的使用者,如果軟體包的最新版本可用,它會安裝軟體包的二進位制版本。對於 Linux 使用者,軟體包總是從源安裝。

我們還可以使用 install.packages() 函式從本地或線上原始檔安裝包。該函式還有其他引數,其中一些我們將在從源安裝時使用。

  1. repos 引數給出了儲存庫的 URL,例如 CRAN 映象。
  2. dependencies 引數指定要安裝的依賴項的型別。
  3. type 引數指定安裝應該來自原始碼還是二進位制檔案。

要從原始碼安裝,我們需要知道這些引數如何相互依賴。

install.packages() 函式的文件說明如下。

  1. repos 引數可以是 NULL 以從本地檔案、目錄或 URL 安裝....
  2. dependencies 引數是 Not used if repos = NULL``。
  3. 當你從 CRAN 上的源安裝舊版本的包時,你可能需要先手動安裝它的依賴項

R 安裝和管理手冊的第 6.3 節指出:install.packages 可以通過將引數 repos 設定為 NULL 從本地 .tar.gz 檔案(或此類檔案的 URL)安裝源包:如果給出的名稱是單個 .tar.gz 檔案。

兩者都暗示 R 在使用原始檔進行安裝時不會獲取和安裝依賴項。

關於 R 包

R 內建了非常基本的功能。它的大部分功能來自 R 使用者在過去幾十年中開發的軟體包。

這些軟體包可在 CRAN 綜合 R 檔案網路上獲得。

訪問 CRAN 網站,單擊側邊欄中的 Packages,然後單擊 Table of available packages(按日期或名稱排序)。顯示所有可用軟體包的列表。

單擊任何包的名稱。該軟體包的 CRAN 頁面開啟。

我們將考慮一個流行包的例子,dplyr。在該列表中搜尋包名稱 dplyr,然後單擊連結。

請注意 dplyr 的 CRAN 頁面上的以下詳細資訊。

  1. Depends 顯示了這個包可以使用的 R 的最低版本。
  2. Imports 顯示 dplyr 依賴的包。如果我們以通常的方式安裝它們,dplyr 將讓 R 安裝它們。
  3. 需要編譯顯示包源有需要編譯的 C、C++ 或 Fortran 程式碼。
  4. Downloads 下,有四行帶有連結。
    1. 包源
    2. Windows 二進位制檔案
    3. macOS 二進位制檔案
    4. 舊的原始碼

要從源安裝包,我們需要了解兩個具體細節。

  1. 軟體包列在 Imports 下。我們要安裝的軟體包取決於所有這些。

從原始碼安裝時,我們首先需要安裝所有這些包。這些包中的每一個也可能依賴於其他包。

  1. 原始碼中是否包含需要編譯的程式碼,我們需要在我們的系統上安裝相關的工具。

install.packages() 函式的文件在二進位制包部分給出了要求。

另外,請記住,一些軟體包僅適用於某些作業系統。此類包在其 CRAN 頁面上有對 OS_type 的描述。例如,檢視 blatr 包。

從本地原始檔安裝 R 包

要從本地原始檔安裝包,我們將使用檔名而不是包名作為 install.packages() 函式的第一個引數。我們還將設定 type = "source"repos = NULL

首先,讓我們得到一個原始碼形式的 R 包。從 CRAN 下載軟體包 aplore3 的原始檔。

為什麼這個特殊的包?這個包的 CRAN 頁面顯示它沒有匯入任何其他包,不需要編譯。

因此,我們可以期望從源頭進行安裝而不會出現故障。

將下載的 .tar.gz 檔案放在 R 的工作目錄中。然後執行以下命令從源安裝包。

示例程式碼:

# FIRST, DOWNLOAD THE FILE.
# Follow the instructions to download the file.


# Make sure R can find this file.
# Place it in the working directory.
# Or change the working directory to where this file is.


# CHANGE THE FILENAME IN THE FOLLOWING CODE
# to match your downloaded file.
install.packages("aplore3_0.9.tar.gz", type = "source", repos = NULL)

R 將顯示 DONE 和括號中的包名稱。說明包安裝成功。

要使用該包,我們需要使用 library() 函式載入該包。

從 CRAN 安裝舊版本的 R 包

如果最新版本的包依賴於比我們擁有的新版本的 R,我們可以通過使用舊版本的 URL 作為 install.packages() 函式的第一個引數從源安裝舊版本.

我們可以像上一節一樣下載舊的原始檔並安裝它。但為了演示,我們將使用 URL。

請記住,即使使用 URL,R 也不會獲取和安裝依賴項。所以我們需要選擇一個沒有依賴的包或者一個已經安裝了所有依賴的包。

我們還需要注意包是否需要編譯。如果是,我們的系統必須滿足要求。

我們將安裝舊版本的 pps 軟體包進行演示。這個包不依賴其他包,不需要編譯。

我們將從 CRAN 複製 2012 版本源的 URL 並在程式碼中使用它。

示例程式碼:

install.packages("https://cran.r-project.org/src/contrib/Archive/pps/pps_0.94.tar.gz", repos = NULL, type = "source")

從原始碼安裝任何 R 包

軟體包和我們的系統(OS、R、其他軟體)必須滿足前面部分中所述的兩個要求,並在此處重複以方便從源安裝任何其他軟體包。

  1. 該包不依賴其他包(Imports 下沒有列出任何內容),或者已經安裝了所有依賴項,或者我們可以先安裝所有需要的依賴項。
  2. 包不需要編譯,或者我們的系統有為此目的所需的工具。

許多包不需要編譯,但大多數依賴於其他包。

安裝 R 包的參考和幫助

R 專案在 R 安裝和管理手冊 的第 6.3 節中提供了詳細的特定於平臺的安裝包說明。

install.packages() 函式的文件還提供了特定於平臺的詳細資訊。在 R Studio 中,單擊 Help > Search R Help 並在搜尋框中輸入 install.packages(不帶括號)。

或者,在 R 控制檯中鍵入一個問號,後跟函式名稱。

R 在包安裝期間的錯誤訊息經常提到由於安裝失敗而沒有滿足確切的要求。

在更基本的層面上,我們必須確保檔名輸入正確(包括大小寫),函式的語法正確,並且 R 可以找到源包。

まとめ

R 的 install.packages() 函式在使用軟體包名稱從 CRAN 安裝最新版本的軟體包時做了很多工作。CRAN 為 Windows 和 macOS 使用者編譯了大多數軟體包的版本也有幫助。

當使用相同的函式從原始檔安裝包時,我們必須首先安裝依賴項並確保我們的系統可以編譯 C、C++ 或 Fortran 程式碼。

作者: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.