向量(vector)為 R 中最基本的資料形態,本章節將介紹向量的相關使用方式。

向量與賦值

在 R 中所有的資料都是以 R 特有的資料結構方式儲存,而最簡單的結構就是數值向量,下面的指令是設定數值向量 x 的內容為 10.45.63.16.4

x <- c(10.4, 5.6, 3.1, 6.4)

這個命令呼叫函數 c() 建立一個向量並指定給 x,其中 <- 為 R 特有的指定運算子(assignment operator),在大多數的情況下可以用 = 取代,也就是這樣:

x = c(10.4, 5.6, 3.1, 6.4)

以上兩個命令是一樣的,但傳統上 R 的程式設計者習慣都是使用 <- 這種寫法。這裡的 c() 函數(combine)會把它所有的參數首尾相連、形成的一個向量,它可以傳入任意數量參數,而參數型態亦可是向量,例如

y <- c(x, 0, x)

會將兩個 x 向量與 0 連接起來,形成一個新的向量。

若要查看變數內容,直接在命令列輸入變數名稱,即可查看變數內容:

y
[1] 10.4  5.6  3.1  6.4  0.0 10.4  5.6  3.1  6.4

若是直接指定一個數值給變數,R 會把它當成只有一個元素的向量,也就是說以下兩個指令是一樣的

value <- 1.5
value <- c(1.5)

要存取向量的某個元素,則可使用中括號 [] 來指定元素的索引(index),索引以 1 為起始,例如 y 向量的第 2 個元素就是:

y[2]
[1] 5.6

如果要更改向量中的特定元素,也可以直接透過 [] 來更改:

y[3] <- 123.4
y
[1]  10.4   5.6 123.4   6.4   0.0  10.4   5.6   3.1   6.4

向量運算

在算術運算式中使用向量會對該向量的每一個元素逐一進行同樣算術運算,例如

x <- c(1, 2, 3)
y <- c(2, 3, 4)
x * y
[1]  2  6 12

在一個運算式中可能包含多個向量,而這些向量的長度如果不同時,較短的向量會重複自己本身直到與最長的向量長度相同才進行運算,例如:

x <- c(1, 2, 3, 4)
y <- c(5, 6)
x * y
[1]  5 12 15 24

在此運算式中,x 向量長度為 4,y 向量的長度為 2,當 xy 相乘時,因為 y 向量的長度不足,R 會自動將 y 向量重複直到與 x 向量的長度相同為止,這裡的 y 向量重複兩次後變成 c(5, 6, 5, 6),再乘上 x 向量,得到結果為 c(5, 12, 15, 24)

以下是參雜單一數值的運算,R 在碰到單一數值的時候,都會當成只有一個元素的向量:

x <- c(1, 2, 3)
2 * x + 3
[1] 5 7 9

如果一個運算式中包含長短不一的向量,而最長的向量長度又不是較短向量長度的整數倍,這時候比較短的向量在重複自己本身時,結尾就會有不完整的向量產生,例如:

x <- c(1, 2, 3, 4, 5)
y <- c(6, 7)
x * y
[1]  6 14 18 28 30

這裡的 y 向量會重複自己,直到跟 x 向量的長度相同,但是 x 向量的長度是 5,y 向量的長度是 2,因此 y 在重複處理之後就會產生 c(6, 7, 6, 7, 6)(最後一次的重複就會不完整),接著再乘上 x,然後得出結果。一般來說這樣的運算不會是我們預期的,所以 R 在遇到類似的狀況時,就會產生警告:

Warning message:
In x * y : 較長的物件長度並非較短物件長度的倍數

運算子

以下是在 R 中常見的算術運算子。

四則運算

四則運算的運算子有:加 +、減 -、乘 *、除 /

1 + 2 * 3 / 4
[1] 2.5

冪運算

冪運算的運算子為 ^,例如 24 次方為:

2 ^ 4
[1] 16

餘數

餘數的運算子為 %%,例如:

5 %% 2
[1] 1

整數除法

整數除法的運算子為 %/%,例如:

5 %/% 2
[1] 2

另外還有一些常用的數學函數,如 log()exp()sin()cos()tan()sqrt() 等等。

除此之外還有些特別的函數:

  • max(x):計算向量 x 的最大值。
  • min(x):計算向量 x 的最小值。
  • range(x):計算向量 x 的範圍,即 c(min(x), max(x))
  • length(x):計算向量 x 的元素個數。
  • sum(x):計算向量 x 的元素總和。
  • prod(x):計算向量 x 的元素乘積。
  • sort(x):傳回一個將向量 x 排序之後的新向量。

以下是一些簡單的統計相關函數:

  • mean(x):計算向量 x 的平均值。
  • var(x):計算向量 x 的樣本變異數(variance),即 sum((x-mean(x))^2)/(length(x)-1)
  • sd(x):計算向量 x 的樣本標準差(standard deviation),即 sqrt(var(x))