03 流程控制及自訂函數
王元俊
教材
• R 語言資料分析:從機器學習、資料探勘、文 字探勘到巨量資料分析 [第二版] • 作者:李仁鐘、李秋緣 • 出版社:博碩文化股份有限公司 • 書號:MP31714 • 出版日期:2017 年 6 月 2 日 • 範例檔案下載命令
• R 程式的命令是由函數與運算式構成。 • 指定運算「 <− 」:物件 <− 運算式 • 例如 • 直接顯示執行結果,將命令用小括弧「( )」包 圍住。區塊 (block)
• 大括弧 {運算式1; …; 運算式n} 表示區塊。 • 傳回值為區塊最後一個運算式的傳回值。
條件 (condition)
1. if 敘述 2. if-else 敘述 3. ifelse( ) 函數 4. switch( ) 函數 • 關係運算:==、!=、>=、<=、>、< • 邏輯運算:&&、||、!if-else 敘述
• 語法:if (條件) 運算式1 else 運算式2 • 範例:
ifelse( ) 函數
• 語法:ifelse (條件, a, b)
若條件為真,傳回 a;否則傳回 b。 • 範例:
switch( ) 函數
• 語法:switch (條件, 運算式1¸ …, 運算式n) • 範例 1:
• 範例 2:
迴圈 (loop)
1. for 敘述 2. while 敘述 3. repeat 敘述 4. break:結束迴圈 5. next:結束目前的迴圈,進入下一個迴圈。for 敘述
• 語法: for (索引變數 in 運算式) {運算式1; …; 運算式m} • 範例 1: • 範例 2: • 範例 3:while 敘述
• 語法:while (條件) {運算式1; …; 運算式m} • 範例:計算 1 + 2 + … + 10
repeat 敘述
• 語法:repeat {運算式; …; if (條件) break} • 範例:計算 1 + 2 + … + 10
next
• next 跳過剩下運算式的執行,直接進入迴圈下 一輪執行。
R 語言的迴圈
• R 語言的迴圈效率較差,所以應盡量避免。 • R 語言有些函數,例如 apply( )、lapply( ) 及
sapply( ) 等,可以更有效率執行類似迴圈的功 能。
apply( )
• apply(X, MARGIN, FUN, ...)
– 對陣列或矩陣的列或行執行指定函數的計算 – X:陣列或矩陣 – MARGIN:1 表示列,2 表是行 – FUN:執行函數 • 範例:利用 sum( ) 函數計算陣列的 每一列與每一行 的總和
lapply( )
• lapply(X, FUN, ...) – 對向量或串列的每一元素執行同一函數,傳 回與 X 相同長度的串列物件 – X:向量或串列 – FUN:要執行的函數 • 範例:sapply( )
• sapply(X, FUN, ...) – 類似 lapply( ) 函數,但是傳回值是一個向量 或矩陣物件。 – X:向量或串列 – FUN:要執行的函數 • 範例:自訂函數 (1)
• 語法: 函數名稱 <− function(參數1, 參數2, …) {運算式1; …; 運算式m} • R 預設將函數內的最後一個運算式當作傳回值。 也可以使用 return( ) 函將值傳回。 • 範例 1:自訂函數 (2)
• 參數給予預設值。 • 範例 2:
自訂函數 (3)
• R 的自訂函數中,若要修改函數外部物件的值, 要使用「<<−」才能改變自訂函數外部的值。