说我在R中有一个矩阵:
MyMat <- matrix(1:15, ncol = 3)
[,1] [,2] [,3]
[1,] 1 6 11
[2,] 2 7 12
[3,] 3 8 13
[4,] 4 9 14
[5,] 5 10 15
此矩阵的尺寸为5 3
。现在,我想根据第一列中的值对其进行子集化:
MyMat <- MyMat[MyMat[, 1] < 3, ]
这为我提供了一个尺寸为2 3
的较小矩阵。到现在为止还挺好。现在让我们说我没有一行符合我的子集标准。
MyMat <- MyMat[MyMat[, 1] < 1, ]
这给了我一个尺寸为0 3
的矩阵,这非常有意义。但是,当我的子集标准只给出一行时,就会出现问题:
MyMat <- MyMat[MyMat[, 1] < 2, ]
当我请求维度时,我得NULL
而不是1 3
。我得到一个长度为3
的整数数组,而不是返回一个矩阵。这是一个令人沮丧的特殊情况。我总是可以通过将子集化操作的结果重新编写为矩阵来解决这个问题,比如
MyMat <- matrix(MyMat[MyMat[, 1] < 2, ], ncol = 3)
但这感觉很笨拙。我的问题是:是否存在更好的子集化,无论行数如何都保证返回矩阵,并且不需要重新生成结果?