天天看點

《R語言機器學習:實用案例分析》——1.5節進階結構

本節書摘來自華章社群《r語言機器學習:實用案例分析》一書中的第1章,第1.5節進階結構,作者[印度] 拉格哈夫·巴利(raghav bali)迪潘簡·撒卡爾(dipanjan sarkar),更多章節内容可以通路雲栖社群“華章社群”公衆号檢視

1.5 進階結構

當我們讨論不使用循環來操作向量時,我們前面提到向量化這個術語。雖然循環是遍

曆向量并進行計算的一個好方法,但是在處理現大資料時它并不是非常有效。這時,r 提

供了下面介紹的一些進階結構。我們将介紹以下函數:

j lapply :對清單進行循環,并對清單的每個元素進行函數求值。

j sapply : lapply 的簡化版本。

j apply :對數組的邊界進行函數求值。

j tapply :對一個向量的子集進行函數求值。

j mapply : lapply 的多元版本。

1.5.1 lapply 和 sapply 函數

正如我們之前提到的, lapply 将一個清單和一個函數作為輸入,對清單中的每一個元

素進行函數求值。如果輸入不是清單,它将在傳回輸出前應用函數 as.list 将輸入參數轉

換成清單類型。因為實際循環在内部使用 c 語言代碼來實作,是以 lapply 比普通的循環運

行得更快。

在下面的代碼片段中,我們将看到 lapply 的實作和一個案例:

輸出:

《R語言機器學習:實用案例分析》——1.5節進階結構

提到 sapply ,除了它嘗試盡可能地簡化輸出結果之外,它與 lapply 十分相似。例如,

如果最終結果的每個元素的長度都為 1,那麼 sapply 将傳回一個向量;如果最終結果的每

個元素的長度都相同但大于 1,那麼它将傳回一個矩陣;如果不能簡化結果,那麼我們将得

到與 lapply 一樣的結果。我們用下面的例子進行說明:

《R語言機器學習:實用案例分析》——1.5節進階結構

1.5.2 apply 函數

apply 函數用于對數組的邊界進行函數求值。例如,對一個數組的行或列應用聚集函數

(aggregate function)。函數 rowsums 、 rowmeans 、 colsums 和 colmeans 在其内部也使用 apply

函數,但進行了進一步的優化,在處理大數組時十分有用。在下面的例子中我們将看到以

上函數的使用:

是以,你可以看到,完全不使用循環而對矩陣應用各種統計函數是如此簡單。

1.5.3 tapply 函數

tapply 函數可以用來對一個向量的子集進行函數求值。如果你熟悉關系資料庫,這與應用 sql 中的 group by 語句類似。我們将利用以下的案例進行說明:

《R語言機器學習:實用案例分析》——1.5節進階結構
《R語言機器學習:實用案例分析》——1.5節進階結構

1.5.4 mapply 函數

mapply 函數是 lapply 函數的多元版本,它用于對參數集合進行并行的函數求值。舉一

個簡單的例子,當我們使用 rep 函數建立一個向量清單時,我們必須寫多個 rep 。然而,使

用 mapply 函數我們可以通過一種更簡練的方式獲得同樣的結果,如下所示:

1.6 進一步使用 r

在我們進行機器學習之前,有必要停頓一下,深呼吸,回顧我們之前學習的内容。這

樣快速而又仔細地回顧 r 會給你之後章節的學習帶來很大幫助。然而,還有兩件事我們必

須馬上完成。它們是如何在 r 中獲得幫助以及如何操作 r 中的不同添加包。

1.6.1 獲得幫助

現在,你必須已經了解了在 r 中有數千個函數和結構,你不可能也不必要了解它們中

的每一個有哪些功能。r 提供了許多直覺的方式來獲得就關于函數、添加包或資料結構的幫

助。你可以通過在 r 的指令提示符運作函數 help.start() ,它将打開一個手冊浏覽器。這

裡,你将獲得包括關于 r 的手冊、參考文檔和其他材料的詳細資訊。下面的指令顯示了在

運作指令 help.start() 後螢幕截圖中的内容,你可以使用它進一步浏覽并獲得更多的幫助:

繼續閱讀