向量之間的加減乘除運算:
> x <- 1>x
[1] 1 2 3 4 5 6 7 8 9 10
> x=x+1
>x
[1] 2 3 4 5 6 7 8 9 10 11
> x = 1:10
>x
[1] 1 2 3 4 5 6 7 8 9 10
> y = seq(1,100, length.out = 10)
>y
[1] 1 12 23 34 45 56 67 78 89 100
> x*y
[1] 1 24 69 136 225 336 469 624 801 1000
> x**y
[1] 1.000000e+00 4.096000e+03 9.414318e+10 2.951479e+20[5] 2.842171e+31 3.771117e+43 4.183778e+56 2.760699e+70[9] 8.464150e+84 1.000000e+100
這些**看起來完全沒有任何問題,就像之前我們已經接觸過的其他語言的程式設計一樣,但是後面就有一些r語言自帶的特性了,比如說有兩個不同長度的向量在進行加減乘除的時候,運算的規律是小的向量不斷迴圈地去乘上大的向量,並且大的向量的長度必須是短的向量的整數倍,不然程式就會報錯。我們舉個例子,假定有乙個長度為2的向量z(1,2),如下所示:
z=c(1,2)>z
[1] 1 2
我們用這個建立好的向量去和剛才建立的x向量進行相乘,得到的結果如下所示:
> z+x[1] 2 4 4 6 6 8 8 10 10 12
> z*x
[1] 1 4 3 8 5 12 7 16 9 20
很顯然r語言當中已經幫我們做了乘法,用z向量當中的每乙個component去乘或者加上x向量當中的每乙個component並不斷迴圈。如果這個時候x向量不是z向量的整數倍,那麼計算機就不知道在**停止計算,就會報錯,出現以下的情況,這是萬萬使不得的:
> z=c(1,2,3)>z
[1] 1 2 3
> z*x
[1] 1 4 9 4 10 18 7 16 27 10warning message:
in z * x : longer object length is
not a multiple of shorter object length
我們在r語言當中也可以很方便的使用%in%對乙個向量當中的哪些元素在另外乙個向量當中,如下所示:
> c(1,2,3) %in% c(1,2,3,4)[1] true true true
> c(1,2,3) %in% c(1,5,6,7,8)
[1] true false false
判斷之後的結果則會用true,false顯示出來。
在r當中也可以使用==來表示判斷真假,比如說我們可以判斷x和y是否是兩個相同的向量,在判斷的時候我們取x和y的向量長度都一樣,數值不一樣的特殊情況,判斷的結果如下所示:
> x==y[1] true false false false false false false false false false
>x
[1] 1 2 3 4 5 6 7 8 9 10
>y
[1] 1 12 23 34 45 56 67 78 89 100
我們還可以使用log()函式來進行計算對數,裡面的引數base表示底數,不帶引數base則表示底數是自然對數e,如下所示:
> log(16,base=2)[1] 4
> log(16)
[1] 2.772589
> log(16)#
預設是自然對數進行計算
[1] 2.772589
下面我們再創造乙個向量對其進行運算,這裡使用了max(),min(),以及sum()求和函式,字面意思也是很容易弄明白的,如下所示:
> vec=1:100>vec
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24[25] 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48[49] 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72[73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96[97] 97 98 99 100
>sum(vec)
[1] 5050
>max(vec)
[1] 100
>min(vec)
[1] 1
r語言當中還可以使用round()函式來表示保留幾位小數,在下面我們就會遇到,如下所示:
> var(vec)#方差[1] 841.6667
> round(var(vec),digits = 6)
[1] 841.6667
> round(var(vec),digits = 2)
[1] 841.67
> prod(vec)#
計算連乘的積
[1] 9.332622e+157
> median(vec)#
計算中位數
[1] 50.5
> quantile(vec)#
計算分位數
0% 25% 50% 75% 100%
1.00 25.75 50.50 75.25 100.00
> quantile(vec,c(0.2,0.4,0.9))
20% 40% 90%
20.8 40.6 90.1
> t=c(1,2,3,4,5,8,3,6)
>which.max(t)
[1] 6
>which.min(t)
[1] 1
得解!今天的向量運算教程就到這裡了!
R語言 向量
1 seq 產生有規律的數列,間距省略時預設值為1。例1 seq 10,20,0.5 例2 seq 0,by 0.03,length 15 2 rep 產生有規律的數列,重複第乙個變數若干次。例1 rep 1 3,1 3 例2 rep 1 3,rep 2,3 例3 rep 1 3,length 10...
R語言 向量
向量是以一維陣列的方法管理資料的一種物件型別。可以說向量是r語言中最基本的資料型別,很多演算法函式都是以向量的形式輸入的。向量可以是數值型 字元型 邏輯值型 t f 和複數型。seq產生等距間隔的數列,其基本形式為 seq from 1,to 1,by from to length.out 1 le...
r語言which R語言向量
向量是以一維陣列的方法管理資料的一種物件型別。可以說向量是r語言中最基本的資料型別,很多演算法函式都是以向量的形式輸入的。向量可以是數值型 字元型 邏輯值型 t f 和複數型。seq產生等距間隔的數列,其基本形式為 seq from 1,to 1,by from to length.out 1 le...