Размер матрицы 1 х м? - PullRequest
       3

Размер матрицы 1 х м?

3 голосов
/ 29 сентября 2011

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

Есть идеи, как легко исправить первоначальный пример, который близок к моей реальной проблеме? Кстати: этот цикл является узким местом моего алгоритма. Следовательно, эффективные решения приветствуются.

Большое спасибо!

1 Ответ

8 голосов
/ 29 сентября 2011

Поведение подмножества [ по умолчанию заключается в преобразовании в более простую структуру, если применимо. Другими словами, как только вы поднаборите матрицу 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

Для получения дополнительной информации см. ?"["

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...