前言:接著上一章(《R語言入門與實踐》第一章:R基礎(chǔ))的任務,現(xiàn)在已經(jīng)有了模擬擲一對骰子的函數(shù)炫惩。接下來的目標是對骰子進行加權(quán)昔园,做出不均勻的骰子——即讓這對骰子擲出大點數(shù)的概率稍高于擲出小點數(shù)的概率蔓榄。需要用兩個函數(shù)實現(xiàn)重復(replicate)和可視化(visualization):
-
replicate()
:重復運行,實現(xiàn)重復投擲骰子 -
qplot()
:快速做圖(quick plot)默刚,將重復拋擲的結(jié)果可視化
拓展學習:qplot入門- 知乎 (zhihu.com)
筆記目錄:
2.1 下載和加載R包
2.2 運用qplot函數(shù)快速繪圖
2.3查找?guī)椭撁娅@取幫助
2.4 項目1總結(jié)(1-2章)
2.1 下載和加載R包
剛才提到的qplot
函數(shù)不是R自帶的函數(shù)甥郑,來自外部的一個獨立的R包ggplot2
。這就是R作為開源軟件最大的特點荤西,很多優(yōu)秀的數(shù)據(jù)科學家澜搅、統(tǒng)計學家、程序員編寫上傳的R包皂冰,可以幫助我們快速實現(xiàn)很多分析操作店展,再次感謝前輩們的貢獻。
當然也有一個潛在的缺點就是秃流,大量的R包在其中找到合適的包赂蕴,需要更多的時間查找和學習。好在優(yōu)秀的前行者們也有很多總結(jié)經(jīng)驗舶胀,小白日常感激概说。
拓展學習:R語言最新最好用綜合包推薦【2022】 - 知乎 (zhihu.com)
- 安裝R包:命令:
install.packages("ggplot2")
,雙引號中間為R包的名稱嚣伐。 - 加載R包:命令:
library("ggplot2")
糖赔,加載包后,沒有信息顯示代表一切正常轩端。 - 每個包只需安裝一次放典,但是每次重新打開RStudio后,都需要重新加載需要的包。
library("ggplot2")
2.2 運用qplot函數(shù)快速繪圖
安裝和加載好奋构,開始使用qplot
繪圖吧~
- 把兩個長度相同的數(shù)值向量交給
qplot
函數(shù)壳影,它就會繪制出一幅散點圖。 - 給
qplot
函數(shù)一個向量弥臼,它就會畫出一個直方圖宴咧。
#輸入R包名稱回車,可以顯示這一函數(shù)的源代碼径缅,太長就不放了掺栅。
qplot
# c函數(shù)創(chuàng)建數(shù)值向量,放在c()括號內(nèi)纳猪,每個數(shù)值用逗號隔開氧卧。
x <- c(-1,-0.8,-0.6,-0.4,-0.2,0,0.2,0.4,0.6,0.8,1)
y <- x^3
qplot(x,y)
-
散點圖:描述兩個變量之間的關(guān)系。
簡單散點圖.png 直方圖:可視化單一變量的分布情況兆旬;顯示這個變量的每一個值x假抄,直方圖會展示有多少數(shù)據(jù)點落在這個值內(nèi)。
通過直方圖可以直觀地看出x的哪些值出現(xiàn)的頻率高丽猬。
x <- c(1,2,2,2,3,3)
qplot(x,binwidth=1)
# binwidth參數(shù)代表直方圖的寬度宿饱,確保每個圖的一致性。
x2 <- c(1,1,1,1,1,2,2,2,2,3,3,4)
qplot(x2,binwidth=1)
# 5個數(shù)據(jù)點取值為1脚祟,因此在區(qū)間[1,2)上的柱高為5谬以。
x3 <- c(0,1,1,2,2,2,3,3,4)
qplot(x3,binwidth=1)
那么,如何通過直方圖檢驗虛擬骰子的均勻程度呢由桌?我們可以通過
replicate
函數(shù)为黎,快速重復運行投擲骰子的命令。投擲足夠多的次數(shù)便會看到投擲結(jié)果呈現(xiàn)的規(guī)律趨于穩(wěn)定行您。
# roll剛才為定義的一對骰子铭乾,如果再次打開Rstudio,之前定義過的函數(shù)娃循,需要重新運行一下炕檩,不然會報錯,沒有這個函數(shù)捌斧。
roll<- function(){
die <- 1:6
dice <- sample(die,size=2,replace=TRUE)
sum(dice)
}
# rolls為投擲10000次的骰子點數(shù)總和的分布笛质。
rolls <- replicate(10000,roll())
qplot(rolls,binwidth=1)
2.3查找?guī)椭撁娅@取幫助
- R函數(shù)家族龐大,不可能記住和掌握每個函數(shù)捞蚂。所幸每一個R函數(shù)都有自己的幫助頁面妇押。
- 查看幫助頁面的方式:
?+ 函數(shù)名稱
- 如果忘記函數(shù)的具體名稱姓迅,可以用:
敲霍?俊马?+函數(shù)關(guān)鍵詞
- 如果查找的函數(shù)來自某個R包,而沒有安裝或者加載該包色冀,以上方式不能查看潭袱。
?sample
幫助頁面的組成部分:
- 函數(shù)描述(Description):一段簡短的有關(guān)該函數(shù)功能的描述。
- 使用方法(Usage):說明如何鍵入該函數(shù)和相應的參數(shù)名锋恬。
- 參數(shù)(Arguments):列出該函數(shù)所包含的所有參數(shù)、參數(shù)的賦值類型及作用编丘。
- 相關(guān)細節(jié)(Details):對函數(shù)的工作原理的進一步描述及注意事項与学。
- 返回值(Value):關(guān)于該函數(shù)運行后返回值的簡短描述。
- 另請參閱(See also):與該函數(shù)相關(guān)的函數(shù)的列表嘉抓。
- 示例(Examples):確彼魇兀可以無錯運行的代碼示例。
很多函數(shù)幫助頁面的內(nèi)容非常多抑片,并且難以理解(尤其我這種英語還不好的小白)卵佛。那就可以只需要關(guān)注能理解的部分,并且最重要的是最后的代碼示例敞斋。運行這些代碼截汪,可以幫助我們快速掌握該函數(shù)的基本功能。
現(xiàn)在植捎,我們的目的是在幫助頁面中找到sample
函數(shù)如何設(shè)置抽取概率衙解,以獲得一對非均勻的骰子。
- 在使用方法(Usage)這里焰枢,我們找到了
sample
函數(shù)的所有參數(shù)設(shè)置蚓峦,最后一個參數(shù)我們還沒有運用〖贸看一下最后一個參數(shù)的作用暑椰,看起來很像我們要找的,接下來來實踐一下吧荐绝!
Usage
sample(x, size, replace = FALSE, prob = NULL)
prob :a vector of probability weights for obtaining the elements of the vector being sampled.(用于獲取被抽取向量元素的概率權(quán)重向量一汽。)
(prob的參數(shù)中的概率權(quán)重與抽取向量元素一一對應)
# roll剛才為定義的一對均勻骰子。
roll<- function(){
die <- 1:6
dice <- sample(die,size=2,replace=TRUE)
sum(dice)
}
# roll2為加了概率權(quán)重參數(shù)的非均勻骰子很泊。
roll2<- 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)
}
# rolls2為投擲10000次非均勻骰子點數(shù)總和的分布角虫。
rolls2 <- replicate(10000,roll2())
qplot(rolls2,binwidth=1)
再看一下上面的均勻骰子結(jié)果圖,可以看出這次的直方圖出現(xiàn)了較大的向右偏態(tài)委造。如果是模擬擲骰子戳鹅,點數(shù)大的概率遠高于點數(shù)小的概率。
2.4項目1總結(jié)
上一章我們總結(jié)了R語言最重要的兩個組成部分:
- 對象:用來存儲數(shù)據(jù)——R語言中的名詞
- 函數(shù):用來操作分析數(shù)據(jù)——R語言中的動詞(函數(shù)中的參數(shù)可以看作副詞)
書中比喻的特別好:
如果函數(shù)和對象結(jié)合起來昏兆,就可以通過R語言表達一個完整的想法枫虏。將多個想法按邏輯順序接合起來,可以生成有力的甚至唯美的語句。(P34)
這樣看R語言和其他語言并無差異隶债。同樣如果想要學好這門語言腾它,就必須掌握一定詞匯量(即R命令),不然難以自如地用R語言和計算機交流死讹。
即使目前詞匯量還不大瞒滴,也不應該羞于開口,一定要多交流赞警,計算機是一個好的聽眾妓忍,有問題會立馬給你指出來(報錯),而不會嘲笑你愧旦;操作正確會給你反饋正確的結(jié)果世剖。(這樣的及時反饋,不就是刻意練習嘛s猿妗)
復盤一下我們已經(jīng)掌握的技能:
- 認識和使用RStudio的用戶界面
- 運行R命令旁瘫、創(chuàng)建R對象
- 編寫自己的R函數(shù)和腳本
- 生成隨機樣本和非均勻概率樣本
- 加載并使用R包
- 快速制圖
- 在需要幫助時及時獲取幫助
到現(xiàn)在為止我們所學習的R基礎(chǔ)知識已經(jīng)足以在接下來學習過程中邊學邊用了,而邊學邊用正是最佳的學習途徑琼蚯。截至目前代碼累積到150行酬凳,向10000行繼續(xù)進發(fā)!