琴子 [R 語言] 程式設計教學:基本概念

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

本文假定投資者沒寫過或僅寫過少量 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 是一個介於 0255 間的整數,一般來說,回傳 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 MarkdownJupyter

關於作者 琴子喜歡觀察市場邏輯,也喜歡沉靜地彈鋼琴。旅行時總習慣記錄風景背後的脈絡,投資時則偏好慢慢思考而非追高殺低。

現實中關注全球經濟與資產配置,虛擬世界則熱衷於在《黑色沙漠》裡操作漁業與貿易鏈,研究市場機制與角色配置的效率極限。

「理性投資」是琴子整理思緒、檢視決策的地方。不是為了給建議,而是希望留下清楚的腳印,提醒自己:判斷永遠比預測重要。