R語言入門:向量的運算


向量之間的加減乘除運算:

> 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 10
Warning 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

得解!今天的向量運算教程就到這里了!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM