1 x m矩阵的尺寸?

时间:2011-09-29 14:15:48

标签: r

R几乎每天都让我一次又一次地嘲笑我:

m <- matrix( 1:6, ncol=2 )
while( dim(m)[1] > 0 ){
  print(m);
  m <- m[-1,]
}

给出:

     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
     [,1] [,2]
[1,]    2    5
[2,]    3    6
Error in while (dim(m)[1] > 0) { : argument is of length zero

R是否存在1xn矩阵的问题或我的错误在哪里?

> nrow( m[-c(2,3), ] )
NULL
> dim( m[-c(2,3), ] )
NULL
> m[-c(2,3), ][,1]
Error in m[-c(2, 3), ][, 1] : incorrect number of dimensions
> str( m[-c(2,3), ] )
int [1:2] 1 4

任何想法如何轻松修复最初的例子,这接近我的实际问题? BTW:这个循环是我的算法的瓶颈。因此,我们赞赏有效的解决方案。

非常感谢!

1 个答案:

答案 0 :(得分:8)

[子集的默认行为是转换为更简单的结构(如果适用)。换句话说,一旦您将1xn矩阵子集化,对象就会转换为向量。

要更改此行为,请使用drop=FALSE参数[

m <- matrix( 1:6, ncol=2 )
while( dim(m)[1] > 0 ){
  print(m);
  m <- m[-1, , drop=FALSE]
}

     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
     [,1] [,2]
[1,]    2    5
[2,]    3    6
     [,1] [,2]
[1,]    3    6

有关详细信息,请参阅?"["