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