R語言入門與實踐學習筆記
一疆偿、項目1:非均勻骰子
第一章 R基礎
目錄
1.1 R語言及Rstudio的安裝
1.2對象
1.3 函數(shù)
1.4 可放回抽樣
1.5 編寫自定義函數(shù)
1.6 參數(shù)
1.7 總結(jié)
1.1 R語言及Rstudio的安裝,網(wǎng)上很多教程大家可以搜索下铆帽,這里就不說啦~
1.2對象
1氯檐、ls()
代表查看環(huán)境中已經(jīng)命名了哪些R對象
die <- 1:6
die
## 1 2 3 4 5 6
ls()
## "die"
2蜕窿、%*%
代表執(zhí)行內(nèi)乘法,只有當?shù)谝痪仃嚨牧袛?shù)與第二個矩陣的行數(shù)相等時才可運算(m×n %*% n×k = m×k)殷绍。計算原理如下:
A=matrix(1:12,nrow=3,ncol=4)
A
## [,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
B=matrix(1:12,nrow=4,ncol=3)
B
## [,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
A %*% B
## [,1] [,2] [,3]
[1,] 70 158 246
[2,] 80 184 288
[3,] 90 210 330
3染苛、%o%
代表執(zhí)行外乘法,不受矩陣行列限制
x = matrix(1:4, nrow = 2);x
## [,1] [,2]
[1,] 1 3
[2,] 2 4
y = matrix(2:5, nrow = 2);y
## [,1] [,2]
[1,] 2 4
[2,] 3 5
x %o% y
## , , 1, 1 #此處含義為取矩陣y的第一行第一列
[,1] [,2]
[1,] 2 6
[2,] 4 8
, , 2, 1
[,1] [,2]
[1,] 3 9
[2,] 6 12
, , 1, 2
[,1] [,2]
[1,] 4 12
[2,] 8 16
, , 2, 2
[,1] [,2]
[1,] 5 15
[2,] 10 20
# 可以看出運算結(jié)果為矩陣x中的元素分別擴大y中元素的倍數(shù)
4主到、t()
執(zhí)行矩陣的轉(zhuǎn)置
t(x)
## [,1] [,2]
[1,] 1 2
[2,] 3 4
5茶行、det()
獲得矩陣的行列式。注意:能求行列式的矩陣一定是正方形矩陣即(m×m)登钥,具體方法比較繁瑣畔师,大家可以看這里的描述,非常詳盡:https://zh.wikihow.com/%E6%B1%823X3%E7%9F%A9%E9%98%B5%E7%9A%84%E8%A1%8C%E5%88%97%E5%BC%8F
1.3 函數(shù)
1牧牢、round()
四舍五入取整
round(3.1415926)
## 3
2看锉、factorial()
階乘
factorial(3)
## 6
3姿锭、sample()
有兩個參數(shù)(argument):一個名為x
的向量,一個名為size
的數(shù)字伯铣。表示從向量x中抽取size個元素并返回
sample(x = 1:4, size = 2)
## 4 2
# 明白sample函數(shù)呻此,我們可以開始擲骰子
sample(die, size = 1)
## 6
sample(die, size = 1)
## 5
4、agrs()
當你新學一個函數(shù)時腔寡,此函數(shù)可以幫你查看這個函數(shù)中的所有參數(shù)名
args(sample)
## function (x, size, replace = FALSE, prob = NULL)
## NULL
1.4 可放回抽樣
我們可以回顧下擲骰子的問題焚鲜,我們只用了兩個參數(shù),而這個replace參數(shù)的含義為抽樣后是否放回的意思
sample(die, size = 2, replace = FALSE) #這樣會導致我們永遠無法得到一個對子蹬蚁,因為不放回
## 4 5
sample(die, size = 6, replace = TRUE) #這樣可以正確模擬一對骰子恃泪,因為放回
## 1 1
這種可放回抽樣法是創(chuàng)建獨立隨機樣本的一種簡單方法外莲。
一對骰子總點數(shù)的計算sum()
dice = sample(die, size = 2, replace = TRUE)
dice
## 3 6
sum(dice)
## 9
1.5 編寫自定義函數(shù)
任何一個函數(shù)包含三部分:函數(shù)名臂痕、程序主體以及參數(shù)集合润努。編寫自定義R函數(shù)時,我們需要定義好這三部分叽粹,并將他們各自存儲在一個R對象之中。這里我們用到function()
函數(shù)却舀。調(diào)用方法為my_function = function(){}
function
的作用是將大括號中的所有代碼構(gòu)建成一個函數(shù)虫几。例:
roll <- function(){
die <- 1:6
dice <- sample(die, size = 2, replace = TRUE)
sum(dice)
} #該函數(shù)即是我們擲一對骰子的函數(shù)了
roll() #這個()可以理解為這個函數(shù)的“觸發(fā)器”,它可以觸發(fā)R運行該函數(shù)
## 5
roll # 不帶()R只會返回該函數(shù)所存儲的代碼挽拔。
## function(){
## die <- 1:6
## dice <- sample(die, size = 2, replace = TRUE)
## sum(dice)
## }
1.6 參數(shù)
我們可以看到上述的function()
函數(shù)并不能允許我們自己設定參數(shù)辆脸,下面我們構(gòu)建一個可以自己設定參數(shù)的函數(shù)
#將上面的第一行代碼die <- 1:6刪除,并把第二行代碼中的die隨便換個單詞例如:bones螃诅,運行后發(fā)現(xiàn)報錯啡氢,因為R的環(huán)境中沒有bones這個對象。
roll2 <- function(){
dice <- sample(bones, size = 2, replace = TRUE)
sum(dice)
}
## Error in sample(bones, size = 2, replace = TRUE) : 找不到對象'bones'
# 我們可以把bones放在()中术裸,這樣就成了function的一個參數(shù)了倘是,比如我們設置bones = 1:4,再次運行
roll2 <- function(bones){
dice <- sample(bones, size = 2, replace = TRUE)
sum(dice)
}
rolls(bones = 1:4)
## 4
# 當我們調(diào)用roll2函數(shù)但不給bones賦值的話袭艺,會再次報錯
rolls()
## Error in sample(bones, size = 2, replace = TRUE) :
## 缺少參數(shù)"bones",也沒有缺省值
# 所以我們可以給bones設置一個初始默認值搀崭,防止這種錯誤出現(xiàn)。這樣不賦值則按默認值運行猾编,賦值則按給定的值運行瘤睹。
roll2 <- function(bones = 1:6){
dice <- sample(bones, size = 2, replace = TRUE)
sum(dice)
}
roll2()
## 7
roll2(bones = 1:3)
## 2
1.7 總結(jié)
我們可以在自定義函數(shù)中設置任意數(shù)量的參數(shù),只要在function()
后的括號里列出它們的名字答倡,并用,
隔開即可轰传。函數(shù)運行時,R會將函數(shù)主體中的每個參數(shù)名稱替換為用戶為該參數(shù)提供的值苇羡,如果沒有提供值绸吸,就會用該參數(shù)的默認值(前提是在定義函數(shù)時設置了該參數(shù)的默認值)如下:
R語言中有兩個最重要的組成部分:一個是對象鼻弧,用來存儲數(shù)據(jù),一個是函數(shù)锦茁,用來操作數(shù)據(jù)攘轩。