問題
> 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)
- 如何得到第一行,第二四列的x的子集?
- x[TRUE,1:2] 輸出的結果應該是什麼呢?
- 當篩選出來的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矩陣格式 √