프로그래밍/R

ADsP 한 권으로 끝내기 139P - matrix 응용문제

이자다 2023. 7. 27. 13:54
반응형

 

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
반응형