官术网_书友最值得收藏!

2.2 從幫助頁面獲取幫助

R自帶的核心函數超過1000個,并且一直都有新成員加入其函數大家族。要想記住和學會所有函數幾乎是不可能的。但所幸每一個R函數都有自己的幫助頁面,你只需要鍵入問號加上一個函數的名稱即可查看該函數的幫助頁面。下面的代碼示例中,每一個命令都會打開相應函數的幫助頁面。這些幫助頁面會出現在RStudio右下面板的Help選項卡中。

        ?sqrt
        ?log10
        ?sample

幫助頁面涵蓋了函數的主要功能和使用方法等諸多有用信息。幫助頁面同樣有代碼文檔的功能,因此讀起來可能是苦樂參半的。它們常??雌饋硎菍iT為已經對該函數有所理解,壓根用不著幫助的那群用戶所寫的。

但也不用灰心,即便如此,從一個函數的幫助頁面仍然能得到很多信息??梢灾魂P注其中能理解的部分,而比較晦澀難懂的部分可以一帶而過。這種做法必然會將你帶到每個幫助頁面中最有用的部分:最底部的代碼示例部分。在這個部分,幾乎每一個幫助頁面都會給出一些使用該函數的代碼示例。運行這些示例代碼,有助于快速掌握該函數的基本功能。

如果一個函數來自某個R包,而你并沒有安裝或者加載該包,那么在R的控制臺用問號加函數名的方式并不能調出該函數的幫助頁面。

2.2.1 幫助頁面的組成部分

每一個幫助頁面都被分成了數個部分。各個部分因函數而異,但通常來說你都可以看到以下幾個部分。

· 函數描述(Description)

一段簡短的有關該函數功能的描述。

· 使用方法(Usage)

告訴你應該如何鍵入該函數和相應的參數名。參數的排列順序應該符合R的預期,也就是該函數被定義時參數的排列順序(這里指的是沒有明確寫出參數名的情況)。

· 參數(Arguments)

列出該函數所包含的所有參數,它們所接受的賦值類型以及每個參數在函數中的作用。

· 相關細節(Details)

關于該函數工作原理的進一步描述。函數的作者通常會利用這個部分提出該函數使用時的一些注意事項,以引起用戶的注意。

· 返回值(Value)

一段關于該函數運行后的返回值的簡短描述。

· 另請參閱(See Also)

與該函數相關的函數列表。

· 代碼示例(Examples)

確保可以無錯運行的代碼示例。幫助頁面內的代碼示例通常會展示給用戶數種使用該函數的方法,這有助于用戶更好地了解該函數的作用。

如果不小心忘記了函數的確切名稱,但又想找到這個函數的幫助頁面,可以嘗試關鍵詞搜索。具體做法:進入R的命令行界面,在關鍵詞之前鍵入兩個問號再按回車鍵。R會列出所有與該關鍵詞有關的幫助頁面的超鏈接。你可以將此看作幫助頁面的幫助頁面。

        ?? log

讓我們仔細看看sample函數的幫助頁面。記?。何覀兿胝业疥P于如何改變抽樣過程中的抽樣概率的信息。這里沒有展示整個幫助頁面(而只是有選擇性地展示最相關的部分),你可以在自己的計算機上跟著下面的提示一步一步操作。

第一步,打開幫助頁面。在RStudio中,幫助頁面與繪圖頁面處于同一個面板中(但幫助頁面在Help選項卡中,而繪圖頁面在Plots選項卡中)。

        ?sample

你看到了什么呢?從上往下應該是這樣的信息。

        Random Samples and Permutations(隨機抽樣與置換)

        Description(說明)
            sample takes a sample of the specified size from the elements of x using either
        with or without replacement.(sample函數從x中隨機抽取放回樣本或者不放回樣本,樣本的大
        小由用戶設置。)

還不錯,我們都知道這些話代表什么意思。進入下一部分:Usage(使用方法)。這里包含了一個有價值的線索。它提到一個叫作prob的參數。

        Usage
            sample(x, size, replace = FALSE, prob = NULL)

如果將幫助頁面下拉至參數部分,可以看到此處關于prob參數的描述看起來非常像我們需要的信息。

        A vector of probability weights for obtaining the elements of the vector being sampled.
     (對于欲抽樣的向量中的元素,該參數是一個相同長度的向量,其元素對應被抽樣向量中相應元素
        的抽樣權重。)

Details(相關細節)部分確認了我們剛才的判斷,并且包含了進一步的說明和指導。

        The optional prob argument can be used to give a vector of weights for obtaining the
        elements of the vector being sampled. They need not sum to one, but they should be
        nonnegative and not all zero.(prob是一個可選參數,用于在抽樣時指定被抽樣向量中每個元
        素的抽樣權重。該參數向量中的元素和可以不為1,但是必須保證每個元素都是非負值且不能同時
        為0。)

雖然幫助頁面中沒有詳細說明,但有必要指出的是,這個參數向量中的元素與被抽樣向量中的元素是一一對應的。因此,prob的第一個元素對應的就是被抽樣向量中第一個元素的抽樣權重,第二個元素對應被抽樣向量中的第二個元素的抽樣權重,以此類推。這種元素對應的方式在R中是頗為常見的。

繼續閱讀幫助頁面,有下面一段文字。

        If replace is true, Walker's alias method (Ripley, 1987) is used...(如果replace參數
        為true,則會使用Walker的別名方法(Ripley,1987)……)

好了,讀到這樣的描述也就意味著接下來我們只需略讀即可。上面的信息已經足夠用來為我們的骰子添加權重了。

練習

重寫之前的擲骰子函數以實現一對有不同權重的骰子。

          roll <- function() {
            die <-1:6
            dice <- sample(die, size = 2, replace = TRUE)
            sum(dice)
          }

你應該在roll函數內部的sample函數中添加一個prob參數。這個參數應該能夠指示sample函數在抽樣時將1/8的抽樣權重交給從1到5的五個點數,而點數6的抽樣權重為3/8。

做完這個練習之后,看看下面的參考答案。

為了改變骰子的權重,需要在sample函數中設置prob參數,這個參數是一個包含權重值的向量,做法如下。

        roll <- function() {
          die <-1:6
          dice <- sample(die, size = 2, replace = TRUE,
            prob = c(1/8, 1/8, 1/8, 1/8, 1/8, 3/8))
          sum(dice)
        }

該函數的效果就是在擲骰子時,點數1~5的權重僅為1/8,而點數6的權重為3/8。

用新函數覆蓋之前的roll函數(即將上面的參考答案代碼鍵入命令行中并運行),然后將新骰子的長期投擲結果繪制出來。圖2-5中右邊的圖就是新骰子投擲結果的直方圖,左邊是舊骰子投擲結果的直方圖。

        rolls <- replicate(10000, roll())
        qplot(rolls, binwidth = 1)

圖2-5:右圖顯示,新骰子的投擲點數明顯更加傾向于大點數組合,因為大點數組合出現的頻率要遠高于小點數組合出現的頻率

該圖說明我們剛才的新骰子函數有效地給點數設置了不同的權重。大點數組合出現的頻率要遠高于小點數組合出現的頻率。但值得注意的是只有觀測長期頻率才能看到如此明顯的效果。單次投擲的骰子點數看似仍是隨機的。如果你在玩《卡坦島移民者》這樣的游戲,這可能是個好消息(你可以告訴朋友你丟了骰子)。但是如果你在分析數據,這種情況就會變得十分惱人,因為這意味著如果骰子被做過手腳,在短期內很難發現。

2.2.2 獲取更多幫助

R的用戶社區非常活躍,你可以通過R幫助郵件列表(https://stat.ethz.ch/mailman/listinfo/r-help)得到更多幫助。你可以在郵件列表中提問,但是很可能你所要提的問題已經存在并已經被解答了。為了避免重復提問,建議在提問之前先在已提問題存檔(http://tolstoy. newcastle.edu.au/R/)中搜索確認一下。

相比R郵件列表,Stack Overflow(http://stackoverflow.com)的幫助模式更好。在這個網站上,程序員們會在線回答各種各樣的問題,而答案的排序是由用戶的打分值決定的,打分值越高代表答案越有用,其排序也就越高。我個人更喜歡Stack Overflow的幫助模式,其用戶體驗相比R郵件列表更加友好(回答問題的人相對來說也更加友善)。在Stack Overflow上,你可以上傳自己的問題或者搜索已經提過的與R相關的問題?,F在上面有3萬多條與R相關的提問。

無論是使用R郵件列表還是Stack Overflow,如果提問時提供的實例代碼具有良好的可重現性,那么得到有用回答的概率就會更大一些??芍噩F性是指他人在復制粘貼你所提供的代碼并運行之后,可以得到與你預想的或碰到的問題一樣的信息或者錯誤提示。

主站蜘蛛池模板: 达州市| 武城县| 台南县| 铁力市| 舟曲县| 崇文区| 开化县| 湘阴县| 浦北县| 旺苍县| 分宜县| 如东县| 安泽县| 巢湖市| 乾安县| 吐鲁番市| 错那县| 师宗县| 凤冈县| 凤山县| 周口市| 灵宝市| 新建县| 勃利县| 绥滨县| 长武县| 白朗县| 卢湾区| 漯河市| 威宁| 元阳县| 浦城县| 灵武市| 柘城县| 绥中县| 区。| 湖北省| 得荣县| 庆元县| 卫辉市| 贺兰县|