剛認識對R裡的函數認識很少,會不斷遇到的問題是:「我的資料是....,我想要做....,有什麼函數可以用?」

其實即使用了R很久,這個問題還是會一直存在的。最簡單的答案當然是靠google,輸入 R和想做的事,中文查不到試著打英文,R的英文資源遠勝於中文,總是能查到一些東西的,甚至可以查到很多人寫的R package(就是別人幫你寫好並打包一堆特殊功能的函數),下載直接用。但對於剛接觸R的人,如果你要做的不是什麼複雜的分析,建議先不要急著下載package或外部函數,而是找直接找能在R裡運作的函數,最基本的function。

查到一些可能有用的函數後,都應該看它的help一眼。 Lesson3 已經提了str()來了解物件這一篇就要說如何例用help()來使用函數。

對任何內存的函數,最精簡又最能幫助你了解這個函數和它的親朋好友的東西就是help,特別不能小看他裡面列出的"親友團",會幫你快速認識一系列的函數。
help唯一的缺點是它~是~英~文~的~,所以這篇要來介紹,在英文閱讀能力有限的情況下,該以怎麼的方式從help裡學習。

很成熟、被廣泛使用很久的分析方法和函數如lm(),很容易在google找到各種介紹和說明,甚至不缺中文的...但是對任何函數,都不要放棄help,剛接觸到一個新函數時,至少help的頭(Title, Description)和尾(see also, example)可以看一下。可以試著把我前面提過但沒有仔細介紹的函數挑你好奇的?一遍。
lm, cut, ls, seq, .... 
 
有了感興趣的函數之後,就可以進入help,然後跟著下面的順序走:看頭看尾中間挑著看。
 
一、了解函數的功能:最起碼看一眼頁面裡的標題或Description。
例如lm是Fitting linear model,如果對統計不了解,可以不清楚是什麼,就多看一眼Description。如果像strcut,看完了標題就知道它是啥了,在不想讀太多英文的情況下,可以跳過Description。直接到進下一步。
 
二、如果你不確定這個函數是不是你想要的,可以直接看倒數兩項see also和example裡找合適的函數。
1. see also:想多認識相關函數,強大的親友團會列在這裡!!! 這是我覺得剛開始接觸R時help最大的幫助:你可以快速的認識一群函數,知道有哪些功能有需要時可以用!一個函數的親朋好友是指功能好像有點像又有點不一樣或是彼此有關聯的函數群。作者們認為,當你須要查這個函數時,你可能須要的其他函數,或這個函數的反函數也全都列在這。
有時候介紹更有效率的家族
函數,就像findInterval比cut有效率一樣,可以依自己須求從中選用的。(請參考:Tips:cut())
2. examplelm這種會輸出複雜結果物件的函數,快速從結果取出結論的方法一定會有範例:可以看到lm有anova, summary, plot之類的函數搭配。(example裡面的例子都是直接複製貼上能運作的。)
 
三、了解函數如何使用:這時候已經確定要使用這個函數了,所以可能要在最後一項example和第二項Usuage來回,必要時參考第三項Arguments:
一般直接把example的程式跑一下已經大約知道如何用了,Usage和Arguments裡會詳細介紹,這個函數能有什麼調整:
Usage裡有時會列出不只一個函數時,它們是近親,甚至是分身(例如:paste0就是paste的分身,paste0是paste的一個特殊用法),如果這個函數可以被assign指到Usage也會提醒。這邊以cut為例:
cut(x, breaks, labels = NULL,
    include.lowest = FALSE, right = TRUE, dig.lab = 3,
    ordered_result = FALSE, ...)
上面是cut的Usage,看起來很長,但只有前兩項參數x, breaks沒有預設值,後面幾項都用等號接上預設值,所以要讓cut運作,至少要放兩個東西在函數裡,而且這裡一時沒看懂也沒關係,有特別想做調整的設定才在Usage和Arguments裡找。
 
四、如果還有點心情再多看點東西,從see also往上翻兩段,有個Note。有時候會有些重要的小道消息。像cut頁面不但see also裡提了findInterval(),Note裡還特別報導了table(cut(x, breaks))和hist()以及cut()和findInterval()難分難解的關係
 
然後就沒了,反正是自學,要走哪一步,其實是自己高興就好。
 
但是如果你用的函數是像lm()這樣某個分析的函數,可能免不了要多走兩步。
 
五、了解整個方法最基本的原理:請看中間的Details和Values。
Details會介紹這個方法概略的運作,(它真的是概略的)。Values會介紹輸出的項目有什麼。一般整理資料功能為主的函數,用之前我們就知道結果大約是怎樣(不然不會選它。) 但是面對陌生的分析方法,他的函數輸出結果,可能要靠Values來幫忙。
比較新一點的方法,R裡面的Detail會對這個方法和函數做最精要的介紹,但如果是已經很成熟、廣為人知的方法如lm,因為太多書介紹,可能只會對函數本身做仔細說明。
 
六、對外求助:
比較成熟的方法可能各種中英文介紹網路上都找得到,還可以問人。新一點的方法就是依賴google找作者或一些使用者的教學文件,或是直接看help裡的Reference有什麼,找Reference來看這時候通常只能找到英文的介紹。
 
最後一件事:雖然平時從物件中提取資料,靠str()可以幫你提到想要的東西,但是str()給的是物件更完整更細的結構,他上面有個大分類class()。和str相比class一般不常用,這就像我們看到鯨魚可能會不清楚他是魚還是哺乳類,須要查詢,但是你不會去想他是動物還是植物。但有些情況是要用class()的:有種函數會依據輸入物件class不同,自動調用不同的函數幫忙,summary就是這類的代表,看這個例子:
 
lm()的example 裡示範輸出的結果要用summay()來取:用summary來整理迴歸分析的結果,它給了比較完整的報表,但是裡具體是什麼,不太熟悉的話就要找?summary看看輸出Values的介紹。然後就會很悲慘的發現summary沒有給重要的訊息,只說是個物件的整理。比較看看summary(lm(...))和summary(trees),它會發現它們輸出的物件長得完全不一樣。

> summary(lm(trees[, 1] ~ trees[, 2]))

> summary(trees)

 

雖然我們是輸入summary(lm(...))但是,真正運作的是summary.lm(lm(...))。這樣的函數叫作generic function。以後有遇到知道怎麼找到實際運作函數的help就好了。透過class確認你的物件屬性,就可以看看知道調用的應該是哪一個函數了。

最後:列出所有summary用在哪些class上:
> methods(summary)
列出哪些函數能用在lm的輸出物件:
> methods(class="lm")
 
小結:
如果你看完Lesson1~4,恭喜你可以畢業了!R的入門教學已經結束了 (沒錯....結束了!!!!!) 
這四課說明介紹一些:如果不知道而直接用R會容易卡住的地方,而且較不容易發現的事情。了解R的這些規則後,你已經有能力自己在R的世界裡探索一翻了。
 
R裡面確實還有很多很基本好用的函數,但我覺得,剩下的東西都是些就算不特別說,只要能打開R,照著這一篇的作法開始認識R裡的物件函數,自然會慢慢學到東西。而且R裡面有很多我不熟的小函數和tips,真的只能遇一個學一個,這是永遠都有新大陸可以發現的世界!

嗯突然想到...如果不想看內建資料,想玩手邊的資料:萬無一失匯資料到R裡
創作者介紹
創作者 生活統計二三事 的頭像
霹靂貓

生活統計二三事

霹靂貓 發表在 痞客邦 留言(0) 人氣( 921 )