开发者

Dimension of a 1 x m Matrix?

R suprises me almost every day again and again:

m <- matrix( 1:6, ncol=2 )
while( dim(m)[1] > 0 开发者_JAVA技巧){
  print(m);
  m <- m[-1,]
}

gives:

     [,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

Does R has a problem with 1xn matrices or where is my mistake?

> 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

Any idea how to easily fix the initial example, which is close to my actual problem? BTW: This loop is the bottleneck of my algorithm. Hence, efficient solutions are appreciated.

Many thanks!


The default behaviour of [ subsetting is to convert to a simpler structure, if applicable. In other words, once you subset to a 1xn matrix, the object gets converted to a vector.

To change this behaviour, use the drop=FALSE argument to [:

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

For more information, see ?"["

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜