r语言向量代码如何创建函数c,R中向量基本操作:创建、运算、访问
本文含有:
向量的創(chuàng)建與運(yùn)算
兩個(gè)方便創(chuàng)建向量的函數(shù):rep()與seq()
如何訪問(wèn)向量中的元素
首先先明白幾個(gè)要點(diǎn):
R區(qū)分大小寫(xiě),向量A和向量a是兩個(gè)不同的向量;
R可以識(shí)別負(fù)數(shù),如5+-2可以輸出結(jié)果3
R是計(jì)數(shù)時(shí)是1-base,也就是說(shuō)R中的1就代表第一個(gè)數(shù),而其他語(yǔ)言有可能第一個(gè)數(shù)用0來(lái)表示。
R的賦值符號(hào)可以是“
1. 向量的創(chuàng)建與運(yùn)算
創(chuàng)建一個(gè)向量
> l
> l
[1] 2 2 1 3 8
創(chuàng)建一個(gè)1至5的向量,“:”表示“至”,“1:5”則表示從1到5的5個(gè)整數(shù)。
> n
> n
[1] 1 2 3 4 5
也可以用函數(shù)vector(length=)創(chuàng)建向量。創(chuàng)建的向量初始默認(rèn)為邏輯值FALSE
> v
> v
[1] FALSE FALSE FALSE FALSE
切片運(yùn)算(這也是訪問(wèn)向量的一種方式)
注意R中的序號(hào)1就表示第1個(gè),而不是2個(gè),要與python相區(qū)別
n[1:4]
[1] 1 2 3 4
基本運(yùn)算
首先肯定是用+, -, *, /這幾個(gè)運(yùn)算符號(hào)進(jìn)行的。冪運(yùn)算使用^,帶括號(hào)先算括號(hào)內(nèi)的內(nèi)容。用剛剛創(chuàng)建的n和a列表進(jìn)行示范:
> a1
> a1
[1] 3 4 4 7 13
> a2
> a2
[1] 2.0000000 1.0000000 0.3333333 0.7500000 1.6000000
a和n是等長(zhǎng)的,即向量?jī)?nèi)元素的個(gè)數(shù)是一樣的,得到的運(yùn)算結(jié)果也是一一對(duì)應(yīng)相運(yùn)算的結(jié)果。若不等長(zhǎng)會(huì)怎么樣呢?
較少元素的向量在運(yùn)算完一遍以后將會(huì)重新對(duì)應(yīng)較多元素的向量中的剩余元素逐個(gè)再?gòu)念^運(yùn)算一次。這句話比較難理解,看例子:
> n
> l
> a
> a
[1] 1 2 3 4 5 2 4 6 8 10
2.seq函數(shù) - 建立等差數(shù)列
建立從2到10,間隔為2的等差數(shù)列:
> n
> n
[1] 2 4 6 8 10
如果換成1到11,間隔為2的等差數(shù)列會(huì)怎么樣呢?答案是11會(huì)被剔除。
> n
> n
[1] 2 4 6 8 10
3. rep函數(shù) - 元素的重復(fù)
兩種格式:
rep(起始值:終止值, times = 重復(fù)次數(shù))
rep(起始值:終止值, each = 重復(fù)次數(shù))
第一種是將整一個(gè)向量重復(fù)n次;
第二種是將向量的每個(gè)元素依次重復(fù)n次;
若直接寫(xiě)數(shù)字,則是第一種times.
見(jiàn)下面例子:
> x=1:4
> rep(x,2)
[1] 1 2 3 4 1 2 3 4
第一行代碼表示把1到4賦值給x,第二行表示把向量x重復(fù)2次。當(dāng)然我們也可以直接寫(xiě)入數(shù)字:
> rep(1:4,2)
[1] 1 2 3 4 1 2 3 4
當(dāng)然,向量可以重復(fù),字符也是可以重復(fù)的,但是不要忘記加個(gè)引號(hào),例如,如果我們想把字符“male”和“female”各重復(fù)10次,那么我們輸入下面的代碼:
> rep(c("male","female"),each=10)
[1] "male" "male" "male" "male" "male" "male" "male" "male"
[9] "male" "male" "female" "female" "female" "female" "female" "female"
[17] "female" "female" "female" "female"
先用c()函數(shù)將“male”和“female”結(jié)合成一個(gè)向量,each=10是將向量中每一個(gè)元素重復(fù)10次。如果不寫(xiě)each=10,直接寫(xiě)10,將會(huì)是這樣的:
> rep(c("male","female"),10)
[1] "male" "female" "male" "female" "male" "female" "male" "female"
[9] "male" "female" "male" "female" "male" "female" "male" "female"
[17] "male" "female" "male" "female"
注意它和前一個(gè)代碼重復(fù)的區(qū)別。再?gòu)?qiáng)調(diào)一次,第一個(gè)是將向量中的每一個(gè)元素重復(fù)十次,第二個(gè)是將整個(gè)向量重復(fù)了10次。
> rep(c(1,2),c(10,10))
[1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2
這樣寫(xiě)也表示把1,2各重復(fù)10次。因此,我們顯然可以想到,如果把1,2,3,4分別重復(fù)5,6,7,8次,代碼一定是這樣的:
> rep(c(1,2,3,4),c(5,6,7,8))
[1] 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4
與seq函數(shù)一樣,rep函數(shù)也可以設(shè)置長(zhǎng)度。
> rep(1:7,3)
[1] 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7
> rep(1:7,3,length.out=18)
[1] 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4
比較這兩組代碼與結(jié)果。第一個(gè)表示將1到7重復(fù)3次,得出了21個(gè)值,第二個(gè)表示將1到7重復(fù)3次,限制長(zhǎng)度為18,所以結(jié)果只有18個(gè)值。同樣,length.out也可以簡(jiǎn)寫(xiě)為length或len。
當(dāng)我們?cè)趓ep中使用each時(shí),還可以使用times:
> rep(c(3,5,7),each=3,times=2)
[1] 3 3 3 5 5 5 7 7 7 3 3 3 5 5 5 7 7 7
代碼表示將向量中的每個(gè)元素重復(fù)三次,再將所得的結(jié)果重復(fù)2次(結(jié)合結(jié)果,仔細(xì)理解我這句話),“times”即“加倍”的意思。
最后想刪除向量x:
rm(x)
4.訪問(wèn)向量中的元素
(1)訪問(wèn)指定位置上的元素
有三種書(shū)寫(xiě)格式:
向量名[位置常量]
向量名[位置常量1:位置常量2]
向量名[c(位置常量列表)]
> v
> v
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> v[1]
> v[2:4]
> v
[1] 1 2 3 4 0 0 0 0 0 0
> w
> v[c(5:9,10)]
> v
[1] 1 2 3 4 5 6 7 8 9 10
這個(gè)c(w, 10)的訪問(wèn)方式,可以有效實(shí)現(xiàn)多個(gè)向量的合并。
(2)利用位置向量訪問(wèn)指定位置上的元素
> v
[1] 1 2 3 4 5 6 7 8 9 10
> w
> v[w]
[1] 2 3 4
要注意這個(gè)w的賦值沒(méi)有用c函數(shù)。
除了直接指定位置,也可以利用邏輯型位置向量來(lái)訪問(wèn)。
> w
> v[w] # 訪問(wèn)v中位置向量w取值為T(mén)RUE位置(即1,4)上的元素
[1] 1 4
(3)訪問(wèn)指定位置之外的元素
加個(gè)負(fù)號(hào)就可以實(shí)現(xiàn)
> v[-1] # 訪問(wèn)除了第1個(gè)元素以外的元素
[1] 2 3 4 5 6 7 8 9 10
> v[-(2:4)] # 訪問(wèn)除了2~4元素以外的元素
[1] 1 5 6 7 8 9 10
> v[-c(5:9,10)]
[1] 1 2 3 4
如果嘗試邏輯型位置向量呢?會(huì)出現(xiàn)問(wèn)題:
> w
[1] TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
> v[-w]
[1] 2 3 4 5 6 7 8 9 10
本文參考:《R語(yǔ)言數(shù)據(jù)挖掘》第2版 薛薇 編著
總結(jié)
以上是生活随笔為你收集整理的r语言向量代码如何创建函数c,R中向量基本操作:创建、运算、访问的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c语言 char operator,C语
- 下一篇: c语言hailstone序列,第一章 c