R軟體apply系列基本函數的運用
資料分析經常需要運用for 迴圈反覆執行某項工作,然而R 程式中卻不可用太多的迴圈,否則會大大降低程式執行的效率!以紐約市空氣品質資料為例,其為包含六個變數的154 筆資料,以apply 函數可以輕易地計算出各行變數的平均值。
> head(airquality)
> apply(airquality, 2, mean) # apply(資料及名稱, 2表逐行,套用函數名稱
結果中出現NA 的是因為該變數原始資料有遺缺值,此時可將遺缺值NA 排除計算(i.e. na.rm = T)即可。
> apply(airquality, 2, mean, na.rm=T)
同理,讀者可以 apply(airquality, 1, mean)逐列求出154 筆觀測值的平均值(此統計值有意義嗎?)
apply 系列的基本函數還有lapply 與sapply,lapply 將airquality 資料視為六個元素的串列(list),逐一元素加總遺缺值個數,故無須加入逐列或逐行的參數值。
> lapply(airquality, function(x) sum(is.na(x)))
sapply 可將上面結果以較簡單的矩陣形式展現,此即為函數名字首的含義。
> sapply(airquality, function(x) sum(is.na(x)))
sapply 函數也可以判斷哪些變數是因子,或加入自定函數計算因子變數的水準數,讀者當可想出apply系列基本函數的其它應用。最後,善用apply 方可將R 程式技巧提升到更高的層次。
>sapply(InsectSprays, is.factor)
> sapply(insectSprays, sunction(x) if (!is.factor(x)) return(0) else length(levels(x)))
參考資料:
Maindonald, J.H. (2004), Using R for Data Analysis and Graphics: Introduction, Code,and Commentary, http://www.stats.uwo.ca/DAAG/.
撰文者: |