ADsP 한 권으로 끝내기 139P - matrix 응용문제
m <- matrix(c(1:6), nrow=3)
m[m[,1]>1&m[,2]>5,] # 쉼표 주목. 행만 지정됨
위 코드의 출력 결과를 묻는 문제가 나왔다.
일단 m 값을 확인하자
> m
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
& 연산자로 연결된 코드를 하나씩 살펴보자. 우선 좌측항부터.
> m[,1]>1
[1] FALSE TRUE TRUE
> m[m[,1]>1]
[1] 2 3 5 6
행렬 m의 1열에 대해 '>1'연산을 걸었더니
1열의 첫번째 요소는 F, 두번째 요소는 T, 세번째 요소는 T가 나왔다.
m[m[,1] > 1]은 바꿔말하면 m[c(FALSE, TRUE, TRUE)] 이다.
좌측항의 결과는 F, T, T
열기준으로 연산하기에 1열의 2, 3번째 요소인 2, 3과 2열의 2, 3번째 요소인 5, 6이 출력된다.
행렬의 열기준 연산에 대해서 더 알아보자면
> m[c(FALSE, TRUE)]
[1] 2 4 6
1열의 첫 요소는 F, 두번째 요소는 T, 세번째 요소는 다시 F -> 2출력
2열의 첫 요소는 T, 두번째 요소는 F, 세번째 요소는 T -> 4, 6 출력
이런식으로 열을 기준으로 계산된다.
이제 & 연산자로 연결된 우측항을 살펴보자
> m[,2]>5
[1] FALSE FALSE TRUE
> m[m[,2]>5]
[1] 3 6
2열에 대해 '>5' 연산을 걸었더니 4와 5는 F, 6은 T가 나왔다.
그 다음줄의 코드도 1열의 세 요소에 F, F, T를 적용해 3을 출력하고, 2열의 세 요소에 F, F, T를 적용해 6을 출력했다.
우측항의 결과는 F, F, T
그럼 이제 문제를 보자
> m <- matrix(c(1:6), nrow=3)
> m
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> m[m[,1]>1&m[,2]>5,]
좌측항은 FTT, 우측항은 FFT이고 &(AND) 연산을 했다.
AND 연산은 둘다 T이면 T이고 나머지 경우에는 F를 반환하므로 저 연산의 결과는 FFT이다.
그럼 문제의 코드는 m[c[FALSE, FALSE, TRUE],]라고 볼 수 있다.
대괄호 내부의 쉼표를 보면 행에 대해서 연산하는 것이니 1행은 F, 2행은 F, 3행이 T이므로 3행의 값인 3, 6을 출력한다.
> m[m[,1]>1&m[,2]>5,]
[1] 3 6
쉼표를 때도 각 열의 3번째 요소를 반환하므로 똑같이 3, 6이 출력된다.
> m[m[,1]>1&m[,2]>5]
[1] 3 6