R語言矩陣維度“消失”的問題


矩陣(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語言能夠正確返回矩陣的維度了。

 


免責聲明!

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



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