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
'프로그래밍 > R' 카테고리의 다른 글
mac m1 KoNLP 패키지 설치 과정 (0) | 2023.10.03 |
---|---|
R의 반복문(repeat, while, for) (0) | 2023.03.16 |
data frame에서 조건에 맞는 행, 열을 출력할 때 유의해야할 점 (0) | 2023.03.16 |
벡터에서 값을 추출할 때 NA(Missing Value)와 NULL의 처리 (0) | 2023.03.16 |