2011-09-29 4 views
3

R은 또 다시 나에게 거의 매일을 suprises :1 x m 매트릭스의 크기?

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 :이 루프는 알고리즘의 병목입니다. 따라서 효율적인 솔루션을 높이 평가할 수 있습니다.

감사합니다.

+3

에서 [R 지옥 (HTTP : //www.burns-stat .com/pages/Tutor/R_inferno.pdf)는 이러한 종류의 "놀라움"에 대한 훌륭한 안내서입니다. 이것은 8.1.44 절에있다. – Aaron

+0

참고 : http://stackoverflow.com/q/7352254/210673 – Aaron

답변

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 
자세한 내용

가 참조 ?"["

+0

나는 drop = FALSE 인수를 찾기 위해 시간을 낭비하지 말아야한다는 것을 알고 있었다. – richiemorrisroe

관련 문제