Day 15- mapply, rapply, eapply
(前言:內個,我只是個剛接觸程式設計的小萌新,如果內文寫的不對,還請各位大大指教 Orz)
到目前為止,我們已經學了apply家族裡的apply, lapply, sapply, vapply還有tapply函數了,接下來把比較常用的apply家族函數(mapply, rapply和eapply)全部學完 :D
看起來好像很多,但是其實剩下的函數就只是運用前面學過的觀念而已。
mapply 就像是複雜一點的sapply,因為mapply可以調整的引數又比sapply更多了。先看一下mapply的寫法:
mapply(函數, 變數名稱, MoreArgs = NULL, SIMPLIFY = TRUE/FALSE, USE.NAMES = TRUE/FALSE)
mapply 的寫法有點複雜,不過他的客製化程度又更高了(什麼東西啊)。首先在括弧裡寫上函數和資料框的變數名稱,再來寫MoreArgs引數,這個引數沒有意外的話應該都要是 = NULL,除非前面的函數有需要多餘的引數。SIMPLIFY引數的話,TRUE就表示要程式做sapply的回傳,FALSE則表示不要做簡化(也就是回傳類似lapply的結果),USE.NAMES 如果為TRUE,表示顯示欄位名稱,如果為FALSE則不顯示。
以kirbsaesthetics為例,mapply回傳結果如下:
rapply 則是lapply的變化,寫法同樣有點複雜:
rapply(變數名稱, 函數, classes = 指定資料型態或 “ANY”, deflt = “NULL”, how = c(“unlist”, “replace”, “list”))
前面兩個引數一樣為變數及欲應用的函數,第三個是class,可以指定輸出結果的資料型態,如不確定可以輸入 “ANY” 讓程式自動輸出,第四個deflt為預設結果,通常為NULL。最後how有三個小引數,unlist, replace, list。若只有 “list” 則輸出結果為列表,若同時輸入三個引數 "unlist", "replace", "list"則輸出結果與只有unlist引數一樣,請看以下結果:
最後我們學eapply,eapply是讓使用者在一個環境內執行函數的一個工具,首先我們要先建立一個新的環境,就用 kirbenvironment <- new.env()就行了。
接下來,我們在這個環境中新增兩個數值向量(這次不想用太多數字了,方便就好),程式碼如下列:
kirbenvironment$ss <- c(20, 55)
kirbenvironment$tt <- c(45, 23)
這時候如果要檢視這兩個數值向量的summary(包含最大數、最小數、四分位數等資訊),我們就這樣寫:eapply(kirbenvironment, summary),輸出結果如下:
好啦,apply家族函數就差不多學到這邊了,我們要跟apply家族暫時說再見囉
明天…來學基礎繪圖吧