任何投資行為均有其風險,作為一名投資者,應為自己任何投資決策行為承擔所有風險。
本網站當盡力提供正確之資訊,所載資料均來自或本諸我們相信可靠之來源,但對其完整性、即時性和正確性不做任何擔保,如有錯誤或疏漏,本網站所有人及關係人,並不負任何法律責任。
本文非任何形式之投資建議,不保證所提供之資訊可以創造獲利、減少投資損失,亦不會鼓吹任何具體之投資行動。本網站所有人及關係人,對於本網站資訊使用者直接或間接依賴並參考相關資訊後,採取任何投資行為所導致之直接或間接損失,或因此產生之一切責任,均不負任何損害賠償及其他法律上之責任。
前言
本文假定投資者沒寫過或僅寫過少量 R 程式,從頭說明撰寫 R 程式的基本概念。
檔案名稱 (File Name) 和副檔名 (File Extension)
R 命令稿 (script) 的副檔名為 .R 。R 工作階段 (session) 的副檔名為 .RData 。R Markdown 的副檔名為 .Rmd 。
如同大部分的程式語言,R 不特別限制檔案名稱,只要符合系統規範即可。一般來說,會使用 kebab-case
(烤肉串命名) 以避開空白所導致的問題。
撰寫第一個 R 程式
交互式終端 (Interactive Console)
在 R 交互式終端,不需要建立命令稿,可直接輸入 R 指令。R 指令會保存程式的工作階段,包括變數、函式等。
開啟 RStudio,在左下方的交互式終端輸入 writeLines("Hello World")
:
> writeLines("Hello World")
Hello World
命令稿 (Script)
建立 hello.R 文字檔案,輸入以下內容:
writeLines("Hello World")
在命令列用 Rscript
指令執行該命令稿:
$ Rscript hello.R
Hello World
Rscript
指令用於非交互性執行 R 命令稿。
離開 R 交互式終端
輸入 quit()
或 q()
指令即可。詳見下文說明。
工作階段 (Session)
R 工作階段會儲存 R 交互式終端的狀態,包括變數、函式等。該工作階段可以儲存成檔案,之後可以重新讀入,以延續先前的狀態。
每次分析最好儲存在不同的工作階段,以免造成命名空間汙染、破壞交互式終端的狀態。例如,在每進行一項分析任務時,使用一個獨立的目錄:
$ mkdir ~/work
$ cd ~/work
$ R
離開 R 交互式終端時,輸入 q()
指令,這時可以把 R 工作階段存起來。日後可以繼續先前的分析。
若在 RStudio 中使用 R 交互式終端的話,可採用以下等效指令:
> dir.create("~/work")
> setwd("~/work")
大小寫敏感性 (Case Sensitivity)
R 程式碼具有大小寫敏感性。
空白 (Space)、縮進 (Indentation)、換行 (Newline)
除了要用空白隔開識別字外,R 不嚴格規範空白、縮進、換行等排版元素。在撰寫 R 命令稿時,會利用這些排版元素將程式碼排版整齊,日後要修改起來會比較容易。
註解 (Comment)
R 使用 #
做為註解文字的前綴。在 #
後到該行行尾的文字皆視為註解。註解是自由文字 (free text),不需要按照 R 語法來撰寫。
主函式 (Main Function)
R 沒有主函式的概念。直接把 R 指令寫在命令稿頂層即可。
離開狀態 (Exit Status)
程式結束時,會拋出離開狀態給系統。由於 R 主要的用途是統計運算,不是命令列程式,回傳離開狀態對 R 來說不是很重要的功能。不過,R 仍然可用 quit
函式離開程式並回傳離開狀態。該函式的使用方式如下:
quit(save="no", status=0, runLast=FALSE)
save
表示是否要儲存工作階段,這裡選擇 "no"
,表示不存。status
是一個介於 0
到 255
間的整數,一般來說,回傳 0
代表程式正常結束。runLast
表示是否要執行完 .Last()
函式再離開 R。
套件 (Package)
除了一些必要的語法外,大部分 R 的功能透過套件來提供。在安裝 R 時,會有 25 個基本套件可用。除此之外,在 CRAN 有許多 R 社群套件可用。
以下 R 指令會安裝 ggplot2,這是一個圖表繪製函式庫:
install.packages("ggplot2")
幫助文件 (Help)
使用 help
函式可閱讀 R 的幫助文件。像是以下例子會顥示 solve
函式的幫助文件:
help(solve)
使用 example
函式則可閱讀簡短的範例程式碼:
example(setwd)
R 幫助文件是以指引 (reference) 的風格來撰寫。該文件風格緊湊,僅適合拿來查詢,不適合用來學習 R,更不適合用來學習統計。
重導程式輸出
使用 sink
函式將接下來的終端輸出重導到 log.txt :
sink("log.txt")
再輸入一次,但不加入參數,則將終端機輸出改回預設輸出,即標準輸出或標準錯誤:
sink()
專案 (Project)
R 不是編譯語言,主要的用途也不是製作應用程式,所以 R 專案的概念和通用型語言的軟體專案不太一樣。R 專案將目標問題及其分析過程製作成可重現文件 (reproducible document)。常見的 R 專案製作軟體有 R Markdown 和 Jupyter。