问题
> 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矩阵格式 √