close

資料分析經常需要運用for 迴圈反覆執行某項工作,然而R 程式中卻不可用太多的迴圈,否則會大大降低程式執行的效率!以紐約市空氣品質資料為例,其為包含六個變數的154 筆資料,以apply 函數可以輕易地計算出各行變數的平均值。


> head(airquality)

apply01  


> apply(airquality, 2, mean) # apply(資料集名稱, 2 表逐行, 套用函數名稱)


apply2  


結果中出現NA 的是因為該變數原始資料有遺缺值,此時可將遺缺值NA 排除計算(i.e. na.rm = T)即可。


> apply(airquality, 2, mean, na.rm = T)

apply3  

 

同理,讀者可以 apply(airquality, 1, mean)逐列求出154 筆觀測值的平均值(此統計值有意義嗎?)
apply 系列的基本函數還有lapply 與sapply,lapply 將airquality 資料視為六個元素的串列(list),逐一
元素加總遺缺值個數,故無須加入逐列或逐行的參數值。

 

> lapply(airquality, function(x) sum(is.na(x)))

apply3  

sapply 可將上面結果以較簡單的矩陣形式展現,此即為函數名字首的含義。

> sapply(airquality, function(x) sum(is.na(x)))

apply5  

sapply 函數也可以判斷哪些變數是因子,或加入自定函數計算因子變數的水準數,讀者當可想出apply
系列基本函數的其它應用。最後,善用apply 方可將R 程式技巧提升到更高的層次。

> sapply(InsectSprays, is.factor)

apply6  

> sapply(InsectSprays, function(x) if (!is.factor(x)) return(0) else length(levels(x)))

apply8  

 

參考資料:

Maindonald, J.H. (2004), Using R for Data Analysis and Graphics: Introduction, Code,
and Commentary, http://www.stats.uwo.ca/DAAG/.

撰文者:
鄒慶士 博士
現任:
北商資訊與決策科學所教授
中華 R 軟體學會理事長
信箱:
vince.tsou@gmail.com

arrow
arrow

    CARS 發表在 痞客邦 留言(0) 人氣()