向量之間的加減乘除運算:git
> 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向量的整數倍,那麼計算機就不知道在哪裏中止計算,就會報錯,出現如下的狀況,這是萬萬使不得的:spa
> z=c(1,2,3) > z [1] 1 2 3 > z*x [1] 1 4 9 4 10 18 7 16 27 10 Warning message: In z * x : longer object length is not a multiple of shorter object length
咱們在R語言當中也能夠很方便的使用%in%對一個向量當中的哪些元素在另一個向量當中,以下所示:code
> 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顯示出來。component
在R當中也可使用==來表示判斷真假,好比說咱們能夠判斷x和y是不是兩個相同的向量,在判斷的時候咱們取x和y的向量長度都同樣,數值不同的特殊狀況,判斷的結果以下所示:blog
> 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()求和函數,字面意思也是很容易弄明白的,以下所示:ip
> 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()函數來表示保留幾位小數,在下面咱們就會遇到,以下所示:it
> 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
得解!今天的向量運算教程就到這裏了!