每天一個R語言小技巧(2)———matrix求子集

問題

>  x=matrix(1:10,ncol=5)
>  colnames(x)=letters[1:5]
>  x
     a b c d  e
[1,] 1 3 5 7  9
[2,] 2 4 6 8 10

(覺得問題太基礎了跳過就ok)

  1. 如何得到第一行,第二四列的x的子集?
  2. x[TRUE,1:2] 輸出的結果應該是什麼呢?
  3. 當篩選出來的x的子集是一行或者一列時,該子集的數據類型是什麼?

答案

1.

通用:

> x[1,c(2,4)]
b d 
3 7 

若矩陣已命名:

> x[1,c("c","d")]
c d 
5 7 

2.

返回1:2列的所有行,相當於x[,1:2]
(注意不是x[1,1:2],這裏的true是當logical變量用的!!)

> x[TRUE,1:2]
     a b
[1,] 1 3
[2,] 2 4

3.

舉個例子,下面得到的分別爲第1行與第1&2行的元素

> x[1,]
a b c d e 
1 3 5 7 9 

> x[1:2,]
     a b c d  e
[1,] 1 3 5 7  9
[2,] 2 4 6 8 10

以上的輸出結果,發現什麼不同麼?
再舉一個例子

> x[,1]
[1] 1 2

> x[,1:2]
     a b
[1,] 1 3
[2,] 2 4

結論:當子集只有一行或一列時,會由matrix結構轉變成vector結構。
(x[,1]的例子還是很明顯的)

這種悄咪咪的轉換在實際使用時還是會造成一些麻煩的,那如果我不想讓subset自己偷偷轉換爲vector呢?
使用參數drop=FALSE

> x[,1]
[1] 1 2

> x[,1,drop=FALSE]
     a
[1,] 1
[2,] 2

輕鬆get矩陣格式 √

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章