Next: , Previous: Vectors and assignment, Up: Simple manipulations numbers and vectors



2.2 向量運算

在算術運算式中使用向量將會對該向量的每一個 元素都進行同樣算術運算。出現在同一個運算式中的 向量最好是一樣的長度。如果他們的長度不一樣, 該運算式的值將是一個和其中最長的向量等長的 向量。運算式中短的向量 會被迴圈使用(recycled)(可能是 部分的元素)以達到最長的向量的長度。 對於一個常數就是簡單的重複。利用前面例子中的變數, 命令

     > v <- 2*x + y + 1

將產生一個新的長度為11的向量 v。它由 2*x 重複2.2次,y 重複一次 1 重複11次得到的向量相加而成。

基本的算術運算符就是常用的+-*/ 和做冪運算的^另外還包括常用的數學函數。如 logexpsincostansqrt 等等。這些在教科書上都有所定義。 maxmin 分別給出一個向量的 最大值和最小值。 函數 range 得到的是一個長度為2的向量,即 c(min(x), max(x))length(x) 給出向量 x 的元素個數, sum(x) 給出 x 中元素的累加和, 以及 prod(x) 得到它們的乘積。 兩個統計函數就是計算均值的 mean(x) (等價於 sum(x)/length(x)和計算樣本方差的 var(x)var(x) 等價於

     sum((x-mean(x))^2)/(length(x)-1)

如果 var() 的參數是一個 n×p 的矩陣,則將該矩陣行與行之間看作是相互獨立的 p-變數的樣本向量,從而得到一個 p×p 的 樣本協方差矩陣。

sort(x) 返回一個和 x 長度一樣但 元素以昇冪排列的向量;當然,還有其他功能更強大的 排序函數(如可以隨意排列的 order()sort.list()等)。 注意 maxmin 將會給出它們參數向量 中的最大和最小值。在同時給予多個向量的情況下,這兩個函數會把參數向量合併成一個向量處理。 並行(parallel)求解最大和最小值的函數 pmaxpmin 將會返回一個和最長的參數長度一致的向量。 該向量每一個元素就是同一位置上的 所有輸入向量(即函數的參數)元素的最大(最小)值。 大多數情況下,用戶並不關心一個數值向量中的“數值” 到底是整數,實數,還是複數。R 環境內部的計算 是以雙精度的實數或者 雙精度的複數(在輸入資料是複數的情況下)實現的。

如果要處理複數,應該給出明確的複數部分。因此

     sqrt(-17)

將會給出 NaN 和一個警告,但是

     sqrt(-17+0i)

就會以複數形式計算。