HOWTO · R

如何從命令列執行 R 指令碼

瞭解如何使用 Rscript 從終端機或命令提示字元執行 R 指令碼、傳遞引數、安排 cron 工作,以及用 Git 管理指令碼版本。

本頁內容

若要從終端機或命令提示字元執行 R 指令碼,請先將程式碼存成檔案,再使用 Rscript path/to/script.R 執行。您必須先安裝 R,且 shell 必須能透過 PATH 找到 Rscript;否則請使用該執行檔的完整安裝路徑。這種做法適合需要重複執行的分析、接受輸入的指令碼,以及排程工作。

什麼是 Rscript?

Rscript 是命令列程式,可用來執行 R 指令碼,或直接執行傳給它的命令。它適合非互動式工作:指令放在檔案或命令中,工作完成後程序便會結束。相較之下,互動式 R 工作階段允許您逐步輸入命令並檢視結果。

R 安裝套件包含 Rscript。在 macOS 或 Linux 上開啟終端機;在 Windows 上開啟命令提示字元或 PowerShell,並執行 Rscript --version,確認是否能使用此命令。如果 shell 顯示找不到命令,請安裝 R,或找出隨 R 安裝的執行檔並使用其完整路徑。安裝目錄會因作業系統和安裝方式而異,因此不要依賴從其他電腦複製而來、綁定特定版本的路徑。

使用 Rscript 執行 R 指令碼

建立名為 mean.R 的檔案,並放入這個簡短範例。若有提供命令列數字,程式就會使用這些數字;否則會使用內建的一組數值。因此,您可以直接執行此檔案,也可以改用其他數值。

args <- commandArgs(trailingOnly = TRUE)
numbers <- if (length(args) > 0) as.numeric(args) else c(1, 2, 3, 4, 5)
cat("Mean: ", mean(numbers), "\n", sep = "")

使用預設輸入時,程式會採用 1 到 5 這些數字;依程式碼檢視結果,預期會輸出 Mean: 3。此範例未經實際執行驗證。程式碼區塊中的 Mean 標籤維持英文,未經翻譯。

若目前所在目錄包含該檔案,請使用 Rscript mean.R 執行。若要從其他目錄執行,請提供指令碼路徑,例如 Rscript /path/to/mean.R。在 Windows 上,路徑含有空格時請加上引號,例如 Rscript "C:/Users/Ada/My Scripts/mean.R";請依照目前使用的 shell 所接受的路徑格式操作。如果 PATH 中找不到 Rscript,請將命令中的 Rscript 換成執行檔的完整路徑,並將指令碼路徑保留為另一個獨立引數。

若要執行不需要另存檔案的簡短運算式,可在類 POSIX shell 或 PowerShell 中使用 -e 選項,例如 Rscript -e 'mean(iris$Sepal.Length)'。Windows 命令提示字元會將單引號視為一般字元,因此不能使用這種單引號寫法;在命令提示字元中,請改用前述儲存成檔案的範例。標準 R 安裝包含 iris 資料集。--help 和 --version 選項分別用來要求顯示命令說明和版本資訊;--verbose 則會要求命令輸出更詳細的資訊。這些選項有助於確認呼叫方式或診斷執行問題。-e 前面只有一個連字號,因此並非所有選項都以兩個連字號開頭。

傳遞引數給 R 指令碼

指令碼可以使用 commandArgs(trailingOnly = TRUE) 讀取檔名後面的值。上方範例會將收到的每個引數轉換成數字,再計算平均值。例如,Rscript mean.R 10 20 30 會傳入三個不同的值。如果輸入值本身含有空格,請依 shell 的規則為該輸入加上引號,讓它以單一引數傳入。請清楚說明指令碼預期的輸入格式;若使用數字以外的資料,也要相應調整轉換和驗證方式。

使用 Cron 工作排程 R 指令碼

在類 Unix 系統上,cron 可以依排程啟動指令碼。使用 crontab -e 編輯目前使用者的 crontab,再加入類似 0 2 * * * /usr/bin/Rscript /path/to/report.R 的項目,依該電腦的 cron 設定每日凌晨 2:00 執行。執行檔路徑和指令碼路徑都只是範例;請改用實際執行排程工作的電腦上的路徑。

排程工作啟動時的工作目錄和環境可能與互動式 shell 不同。請為執行檔、指令碼及輸入或輸出檔案使用絕對路徑;如果需要診斷排程執行狀況,也請設定好輸出或錯誤訊息的保存方式。Cron 適用於類 Unix 系統;Windows 使用者則可改用系統的工作排程器。

使用 Git 管理 R 指令碼版本

Git 可以追蹤 R 指令碼及相關專案檔案的變更,方便您檢視修改內容或還原到先前版本。Git 是選用工具:使用 Rscript 執行指令碼並不需要 Git。在專案目錄中,使用 git init 初始化儲存庫,使用 git add 加入想追蹤的檔案,再使用 git commit 記錄快照。提交前請檢查即將提交的內容;除非產生的資料或憑證確實應納入專案歷史紀錄,否則不要加入這些內容。

結論

將程式碼存成 R 檔案,再使用 Rscript 和指令碼路徑執行。確認已安裝 R,且 shell 能找到執行檔;路徑有需要時請加上引號,並在檔名後傳入輸入值。若要定期執行工作,請使用符合排程環境的路徑;若要追蹤指令碼變更,則可使用 Git。

常見問題

  1. 如何安裝 R 和 Rscript?
    請依照作業系統的安裝指示安裝 R。Rscript 已包含在 R 中;此工作流程不需要另外安裝 Rscript。

  2. 可以在 Windows 上執行 R 指令碼嗎?
    可以。如果執行檔已在 PATH 中,請在命令提示字元或 PowerShell 執行 Rscript script.R。否則,請使用已安裝執行檔的完整路徑來呼叫。路徑含有空格時,請依照所用 shell 的引號規則處理。

  3. Rscript 和 R 有什麼不同?
    Rscript 用於從命令列執行指令碼或運算式。R 命令通常會啟動互動式工作階段,讓您在操作過程中輸入命令並檢視結果。

  4. 如何查看已安裝的 Rscript 版本?
    在終端機或命令提示字元執行 Rscript --version。命令必須能透過 PATH 找到,否則請使用執行檔的完整路徑。

  5. 如何依序執行多個 R 指令碼?
    在類 Unix shell 中,可用 && 串接命令,例如 Rscript first.R && Rscript second.R。只有第一個命令成功時,才會執行第二個命令。若要執行較長的命令序列,可將呼叫指令寫入 shell 指令碼,或使用適合您系統的其他排程工具。