前言:零基礎(chǔ)開始學(xué)習(xí)的小白老玛,文科生沒接觸過編程,所以想通過輸出倒逼學(xué)習(xí),通過簡書記錄自己的學(xué)習(xí)過程捅厂,已經(jīng)有很多前輩做了很好的R語言各種教程工作,感謝能站在巨人們的肩膀上開始學(xué)習(xí)资柔,我參考學(xué)習(xí)過的鏈接也會直接附上焙贷。輸出的內(nèi)容僅僅是我摸索的過程,以促進學(xué)習(xí)為出發(fā)點贿堰,如果也能有幸?guī)椭胶髞淼男』锇檎奚郑埠荛_心~
筆記目錄:
1.0 R及Rstudio的安裝和參考文獻介紹
1.1 RStudio的用戶界面
1.2 運行R命令、創(chuàng)建對象
1.3 使用R函數(shù)
1.4 可放回抽樣
1.5 編寫自定義函數(shù)
1.6 為函數(shù)自定義參數(shù)
1.7 學(xué)會使用R腳本編輯代碼
1.8 小結(jié)
1.0 安裝R和RStudio
R安裝:https://www.r-project.org/
RStudio安裝:https://www.rstudio.com/
可以看下面詳細的教程:R 安裝詳解_CSDN博客
我學(xué)習(xí)的書是:R語言入門與實踐 (ituring.com.cn)
下面的學(xué)習(xí)主要以這本書的結(jié)構(gòu)和內(nèi)容安排進行記錄羹与,因為純小白入門故硅,希望剛開始能有一個完整的知識體系。這個過程中也會搜索網(wǎng)絡(luò)資源進行輔助學(xué)習(xí)纵搁,邊練習(xí)邊記錄契吉,希望能比較扎實的學(xué)會。
本書設(shè)置了三個虛擬的項目诡渴,通過R實現(xiàn)開賭場的夢想:
項目1:一對可以用來生成隨機數(shù)字的骰子(非均勻骰子)
項目2:一副可以用來發(fā)牌和洗牌的撲克(玩撲克牌)
項目3:一臺模擬真實的視頻彩票終端機的老虎機(老虎機)
我覺得這個設(shè)計很有趣捐晶,也很科學(xué)合理,“開賭場”就是一個大項目妄辩,具體通過完成一個一個小項目惑灵,在這個過程中實踐R的基本操作,使得每個操作有一個具體的目標眼耀。如果像說明書一樣去學(xué)習(xí)英支,恐怕很枯燥,很難推進下去哮伟。
正如書中所說:
認認真真地跟著本書完成全部三個項目之后干花,你將掌握數(shù)據(jù)科學(xué)家所必需的專業(yè)技能妄帘。具體來說,你將學(xué)會如何將數(shù)據(jù)存儲到計算機內(nèi)存中池凄,如何訪問計算機內(nèi)存中的數(shù)據(jù)抡驼,以及如何在必要的時候?qū)?nèi)存中的數(shù)據(jù)值進行轉(zhuǎn)換。你還將學(xué)會如何用R編寫自己的程序肿仑,并將其用于分析數(shù)據(jù)和運行模擬致盟。(P2)
本章開頭第一句話:“本章概述了R編程的基礎(chǔ)技能,學(xué)完之后你就可以立即上手編寫R程序了尤慰×笪”給了我很大的動力和激勵,信心滿滿的開始學(xué)習(xí)啦伟端!
1.1 RStudio的用戶界面
以下是RStudio的基礎(chǔ)界面杯道,四個主要的窗口:R和RStudio都是幫助我們與計算機進行對話的工具。書中一個形象的比喻责蝠,RStudio是話筒蕉饼,而R則是溝通所用的語言。而從界面來看玛歌,R是毛坯房,RStudio是精裝房擎椰,我們從操作更方便支子,界面更美觀的RStudio開始吧~
1.2運行R命令、創(chuàng)建對象
在R語言中达舒,#為注釋符號(commenting symbol)值朋,#后的內(nèi)容不會被當(dāng)作R命令執(zhí)行。我們在編寫程序過程中要養(yǎng)成添加注釋的習(xí)慣巩搏,不然過一段時間再打開昨登,都不知道寫的什么了,尤其像我這種小白贯底,一定要邊寫邊注釋嘍丰辣!
和書中保持一致,以下代碼中禽捆,一個#代表添加的注釋笙什,兩個#代表程序的執(zhí)行結(jié)果。
在控制臺窗口最下面的>提示符后鍵入代碼胚想,即R命令(command)琐凭,回車后,計算機就會執(zhí)行該命令浊服。
#我的第一行代碼统屈,生成骰子的六個數(shù)字
#運算符(:)胚吁,表示返回兩個整數(shù)值之間的所有整數(shù),快速生成數(shù)字序列(向量)
1:6
##1 2 3 4 5 6
創(chuàng)建R對象:確定一個名稱愁憔,將數(shù)據(jù)用賦值符號(<-)
賦值給它腕扶,快捷鍵Alt+-。
- 創(chuàng)建的R對象會顯示在右上方的環(huán)境窗口惩淳,這里會顯示最近一次打開RStudio創(chuàng)建的所有R對象蕉毯。
- 也可以用ls命令,查看已經(jīng)命名的哪些R對象思犁。
ls()
- R對象命名規(guī)則:不能以數(shù)字開頭代虾;不能有特殊符號,如
!$^@*&
等激蹲;同時區(qū)分大小寫棉磨,name
和Name
是兩個不同的對象。 - R可以自由運算学辱,也可以以對象進行整體運算乘瓤,R采用元素方式執(zhí)行運算(相同的運算應(yīng)用于該數(shù)字集的每個元素)
#創(chuàng)建一個對象,die(骰子)
die <- 1:6
#查看儲存內(nèi)容策泣,輸入名稱衙傀,回車
die
## 1 2 3 4 5 6
#元素方式運算
die-1
## 0 1 2 3 4 5
die/2
## 0.5 1.0 1.5 2.0 2.5 3.0
#兩個向量的運算,R會執(zhí)行向量的每個元素對應(yīng)運算萨咕,產(chǎn)生同樣長度的新向量统抬。
die*die
## 1 4 9 16 25 36
#如果兩個向量長度不相等,會重復(fù)運算較短的向量(向量循環(huán))危队;
#如果長向量不是短向量長度的整數(shù)倍聪建,R會返回警告信息。
die + 1:2
## 2 4 4 6 6 8
die + 1:4
## 2 4 6 8 6 8
## Warning message:
## In die + 1:4 : 長的對象長度不是短的對象長度的整倍數(shù)
1.3使用R函數(shù)
我們已經(jīng)創(chuàng)建了一個虛擬骰子茫陆,如何實現(xiàn)隨機抽樣呢金麸?這個時候就需要用到R函數(shù)。
- R函數(shù)的使用方法:名稱+()簿盅,()可以看作函數(shù)“觸發(fā)器”挥下。
- 如果鍵入一個函數(shù)沒有加(),R會展示這個函數(shù)所存儲的代碼桨醋。
- 函數(shù)中的數(shù)據(jù)該函數(shù)的參數(shù)(argument)见秽,參數(shù)可以是原始數(shù)據(jù)、R對象讨盒、另一個R函數(shù)的返回結(jié)果(執(zhí)行方式從內(nèi)到外)解取。
-
sample
(隨機抽樣)這個函數(shù),可以幫助我們模擬擲骰子返顺。
#R函數(shù)的執(zhí)行方式是從內(nèi)到外禀苦。如蔓肯,下面例子R先找到die這個對象,然后計算6個數(shù)值的平均值振乏,再進行四舍五入蔗包。
round(mean(die))
## 4
sample(x=die,size=1)
sample(die,size=1)
sample(die,1)
## 3
- 以上三行命令效果都是一樣的,一般前面1-2個很熟悉的參數(shù)慧邮,可以不寫參數(shù)名稱调限,R會根據(jù)參數(shù)順序自動識別)
- 如果不知道如何設(shè)置函數(shù)的參數(shù),可以用
args
函數(shù)查看參數(shù)误澳。
args(sample)
## function (x, size, replace = FALSE, prob = NULL)
#sample默認為不可放回抽樣耻矮,即replace = FALSE。因此如果同時抽取兩個數(shù)忆谓,不可能相同裆装。
#將replace改為TRUE,設(shè)定為可放回抽樣倡缠,才可以真正模擬骰子哨免。
1.4 可放回抽樣
下面模擬一對骰子的投擲,并計算兩個骰子點數(shù)的和(隨機可放回抽樣):
sample(die,size=2,replace=TRUE)
#將這一對模擬的骰子創(chuàng)建為R對象dice昙沦,把抽取骰子的這組結(jié)果保存到對象中琢唾,結(jié)果就不會改變了。
dice <- sample(die,size=2,replace=TRUE)
dice
sum(dice)
## 9
1.5 編寫自定義函數(shù)
接下來盾饮,我們把剛才模擬擲一對骰子的R程序進行打包采桃,生成一個新的函數(shù)roll,這樣每次重新投擲就變得更加方便丐谋。每次調(diào)用roll()
函數(shù),R都會返回兩個骰子點數(shù)的和煌珊。
為什么要自定義函數(shù)号俐?
- 自定義的函數(shù)和R中的其他函數(shù)沒有任何區(qū)別。
- 可以隨時按照自己的需求創(chuàng)造出新的定庵、定制化并且可以重復(fù)使用的工具吏饿。
- 就像在excel中增加一個自定義選項加入菜單欄,但我們沒辦法完全自定義程序蔬浙。
如何自定義函數(shù)猪落?
- R函數(shù)實際上就是一種不同類型的R對象。
- 任何一個函數(shù)包含三部分:函數(shù)名畴博、程序主體笨忌、參數(shù)集合。
- 編寫自定義函數(shù)只需要把這三部分內(nèi)容定義好俱病,并存儲在一個R對象之中官疲。
- 函數(shù)構(gòu)建器:這里用到
function()
函數(shù)袱结。funtion()
函數(shù)+{}
,可以將后面{}的所有代碼構(gòu)建成一個新的函數(shù)途凫。
構(gòu)建函數(shù)流程.png(P20)
roll <- function(){
die <- 1:6
dice <- sample(die,size=2,replace=TRUE)
sum(dice)
}
roll()
## 6
1.6為函數(shù)自定義參數(shù)
你可以在自定義函數(shù)中設(shè)置任意數(shù)量的參數(shù)垢夹,只要在function
后的括號中列出它們的名稱,并且用逗號隔開即可维费。
- 設(shè)置參數(shù)的好處是果元,可以調(diào)用任意范圍內(nèi)的值,如
sample
在任意范圍內(nèi)進行隨意抽樣犀盟。 - 如果沒有設(shè)置參數(shù)值而晒,那么R會用該參數(shù)的默認值代替(前提是在定義函數(shù)時設(shè)置了該參數(shù)的默認值)。
#增加這個參數(shù)的好處是且蓬,bones可以設(shè)置為任意范圍數(shù)列欣硼,可以投擲不同類型的骰子。
roll2 <- function(bones){
dice <- sample(bones,size=2,replace=TRUE)
sum(dice)
}
roll2(bones = 1:6)
## 8
#可以給bones設(shè)置一個初始默認值恶阴。
roll2 <- function(bones = 1:6){
dice <- sample(bones,size=2,replace=TRUE)
sum(dice)
}
roll2()
## 7
1.7學(xué)會使用R腳本編輯代碼
我們在控制臺編輯的命令和創(chuàng)建的函數(shù)诈胜,如果想編輯和重復(fù)使用,用R腳本(script)創(chuàng)建代碼草稿冯事,會非常便捷和方便焦匈。
- 創(chuàng)建方式:File>New File >R Script
- 運行腳本:Ctrl+回車,可以實現(xiàn)Run的功能昵仅,默認運行鼠標光標所在的行缓熟。用鼠標選中一段代碼,便會運行這段代碼摔笤。
使用編程腳本文件的好處:
1. 可中斷性
第一天編輯的工作保存腳本文件够滑,第二天可以在第一天基礎(chǔ)上繼續(xù)編寫程序。有時候開始一個項目吕世,每次關(guān)開界面需要很大的勇氣彰触,很多操作都得從頭再來。
2. 可再現(xiàn)性
腳本文件使做得所有工作有記錄可查命辖,很強的可再現(xiàn)况毅、可重復(fù)性,對于很多科研項目需要不算重復(fù)調(diào)試尔艇,是很大的幫助尔许!
3. 便于交流分享
可以把腳本分享給別人,適合團隊工作终娃,可以減少很多重復(fù)性工作味廊。
1.8小結(jié)
學(xué)完這一章,已經(jīng)打好了R初步操作的基礎(chǔ),已經(jīng)在計算機中存儲了一對虛擬的骰子(dice)和模擬骰子骰子的roll函數(shù)毡们,能夠初步通過R語言和計算機交流了迅皇。但今天看一個教程視頻,up主說:“敲1萬行代碼才可能入門衙熔!”第一章登颓,我敲了75行代碼(加注釋),慢慢積累嘛红氯,已經(jīng)走出最難的第一步啦框咙!
總結(jié):R語言最重要的兩個組成部分:
- 對象:用來存儲數(shù)據(jù);
- 函數(shù):用來操作分析數(shù)據(jù)痢甘。
- R還使用+喇嘱、-、*塞栅、/和<-者铜、:等運算符來完成基本的任務(wù)。
通過本章放椰,我們已經(jīng)能夠利用R對象在計算機中存儲數(shù)據(jù)作烟,并通過R函數(shù)將一些復(fù)雜的計算任務(wù)自動化。