[R] 리스트 내 행렬들의 열합계(colSums) 구하기

해당 포스트에서는 네이버지식인을 통해 질문 받은 "행렬들이 담긴 리스트에서 열의 합계를 구하는 방법"에 대해 설명합니다.

column-sum-by-matrix-in-list
▲ 네이버지식인 질문

질문


리스트에 각 열의 합계 구하는 방법좀 알려주세요ㅜㅜ
lapply 를 이용해서요!!
a <- matrix(1:9, 3,3)
b <- matrix(4:15, 3,4)
T <- list(a,b)
이 리스트의 각 열의 합계를 계산하는 R 코드를 알려주세요ㅠㅠㅠ 부탁드리겠습니다.


풀이

위 문제는 데이터(T)가 있고 사용 함수가 제한(lapply())되어 있습니다. 이런 문제의 경우, 제시된 함수의 사용법만 알면 간단히 해결가능하며, 이번 문제도 한 줄의 코드로 해결이 가능했습니다.

아래에서는 데이터를 생성하고 리스트 내 행렬들의 열합계를 구하는 코드를 설명합니다.

1. 데이터 생성

a <- matrix(1:9, 3, 3)
b <- matrix(4:15, 3, 4)

T <- list(a, b)
T
[[1]]
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

[[2]]
     [,1] [,2] [,3] [,4]
[1,]    4    7   10   13
[2,]    5    8   11   14
[3,]    6    9   12   15

2. 리스트 내 매트릭스별 열합계 구하기

lapply() 함수는 리스트를 반환하는 apply 계열 함수이며, 사용법은 아래와 같습니다.

how-to-use-lapply-in-r
▲ lapply 사용법


위 사용법을 참고하여 작성한 코드는 아래와 같으며, 입력값에는 T를 넣고 적용 함수 FUN에는 열합계를 구해주는 함수인 colSums()을 입력하였습니다.

lapply(T, colSums)
[[1]]
[1]  6 15 24

[[2]]
[1] 15 24 33 42

출력 결과를 보면 첫 번째 리스트의 행렬의 열합계와 두 번째 리스트의 행렬의 열합계가 모두 잘 구해진 것을 볼 수 있습니다.

마무리

이번 포스트에서는 리스트 내 행렬들의 열합계를 구하는 방법을 설명하였습니다. 이번 질문은 사용 가능한 함수가 lapply()로 제한되어 있어 오히려 쉽게 해결할 수 있는 문제였습니다. R에서 제공되거나 사용자들이 공개한 다양한 패키지들을 얼마나 잘 활용하는가도 R 분석가/프로그래머의 중요한 역량 중 하나이니 다양한 패키지들을 조사하고 공부해 보시는 것을 추천드립니다.

관련 링크

[1] [R] 행렬 생성 및 부분 행렬 추출
[2] [R] 행렬곱 함수 직접 구현하기 (feat. For반복문)


banner-request-analysis