当行数可以是1时,提取子矩阵

时间:2017-05-21 11:25:29

标签: r matrix

我试图提取一个更大矩阵的子矩阵,只包含第一行n行:

> first.rows <- function(x, n) {
+   x[1:n,]
+ }
> x <- matrix(1:6, 3, 2)
> first.rows(x, 2)
     [,1] [,2]
[1,]    1    4
[2,]    2    5

如上所示,天真的方法很有效,除非n小于2:

> first.rows(x, 1)
[1] 1 4

对于n == 1,我突然得到一个向量而不是矩阵!我可以使用matrix(x[1:n,], n, ncol(x))来解决这个问题,但这看起来不必要地复杂化了。有没有办法在没有矩阵向量矩阵往返的情况下解决这个问题? (也许甚至可以为n == 0工作?)

1 个答案:

答案 0 :(得分:3)

我们需要使用drop = FALSE来处理默认情况下只有一行的情况[(请检查?Extract)它使用drop = TRUEsubset不同}

first.rows <- function(x, n) {
   x[seq_len(n),, drop = FALSE]
}

除此之外,对于可以seq_len(n)

的特殊情况,最好还是1:n代替n=0