矩陣(matrix)是R語言中很基礎的一種數據結構,也是R語言使用者經常使用的一種數據結構。矩陣的維度一般為二維(m*n)。
R語言中矩陣的操作是非常簡單易懂的,但是在對R語言做矩陣操作時,有個地方需要特別注意。下面我們通過一個例子說明。
首先,我們創建一個用於測試的矩陣。
test1 <- matrix(data = c(1:6), nrow = 3, ncol = 2, dimnames = list(c("row1", "row2", "row3"), c("col1", "col2")))
然后我們查看下這個矩陣,矩陣是一個三行兩列的矩陣。
> test1 col1 col2 row1 1 4 row2 2 5 row3 3 6
然后,我們任意取出它們的子矩陣並使用dim()函數查看子矩陣的維度。
> dim(test1[1:2, ]); test1[1:2, ] [1] 2 2 col1 col2 row1 1 4 row2 2 5 > dim(test1[2, ]); test1[2, ] NULL col1 col2 2 5
我們發現第一次取出某個維度為2*2的子矩陣時,系統正確返回了子矩陣的維度,而當我們第二次取出一個維度為1*2的子矩陣時,系統卻未能正確返回子矩陣的維度且維度為NULL。很顯然,R語言將這個子矩陣當成向量處理了,因此維度也“消失”了。這個是非常需要注意的,筆者日常使用R語言分析數據的時候,也不經意間落入過這個“圈套”,有時候感覺代碼邏輯上沒有任何的錯誤,但當運行程序的時候,就會出現這個某個令人不解的error,然后需要花上一點時間慢慢debug,然后恍然大悟,原來是這個原因。
解決或者說避免出現這個問題也是非常簡單的,我們可以直接使用drop參數。
> # using the drop parameter > dim(test1[2, , drop = FALSE]) [1] 1 2
我們可以看到,將drop參數設為FALSE之后,R語言能夠正確返回矩陣的維度了。