sapply
與 lapply
函數
在計算變數的平均值、變異數、最小值、最大值與樣本數等數值的時候,我們還是會需要執行類似 mean(Veg$R)
、sd(Veg$R)
、min(Veg$R)
、max(Veg$R)
與 length(Veg$R)
這些指令,但是如果一次要對多個變數計算這些數值的時候(例如計算所有變數的平均值),我們可以使用 sapply
函數:
sapply(Veg[, 5:9], FUN = mean)
R ROCK LITTER ML 9.965517 20.991379 22.853448 1.086207 BARESOIL 17.594828
另外還有一個 lapply
函數,功能跟 sapply
類似,不過輸出的格式有些不同:
lapply(Veg[, 5:9], FUN = mean)
輸出為
$R [1] 9.965517 $ROCK [1] 20.99138 $LITTER [1] 22.85345 $ML [1] 1.086207 $BARESOIL [1] 17.59483
lapply
的輸出是一個 list,而 sapply
的輸出則是一個向量,兩者在功能上沒有差別,只是輸出格式不同而已。
tapply
在套用 FUN
函數計算時,會使用區分群組之後的資料來計算,而 lapply
與 sapply
則是使用全部的資料做計算。lapply
與 sapply
所指定的 X 參數必須要是一個 data frame,如果要處理多個向量變數,可以使用 data.frame
函數建立一個 data frame:
sapply(data.frame(cbind(Veg$R, Veg$ROCK, Veg$LITTER, Veg$ML, Veg$BARESOIL)), FUN = mean)
輸出為
X1 X2 X3 X4 9.965517 20.991379 22.853448 1.086207 X5 17.594828
Exercise 1
temperature.xls
包含了 1990 年到 2005 年荷蘭海岸線上 30 個觀測點的氣溫觀測資料,請計算:
- 每一個觀測點(
Station
)每個月(Month
)的氣溫觀測值平均數。(計算結果應為 30 × 12 的表格) - 每一個觀測點每個月的氣溫觀測值標準差以及樣本數。