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家族暫時說再見囉
明天…來學基礎繪圖吧