해당 포스트에서는 네이버지식인을 통해 질문 받은 "행렬들이 담긴 리스트에서 열의 합계를 구하는 방법"에 대해 설명합니다.
질문
리스트에 각 열의 합계 구하는 방법좀 알려주세요ㅜㅜ
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 계열 함수이며, 사용법은 아래와 같습니다.
위 사용법을 참고하여 작성한 코드는 아래와 같으며, 입력값에는 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반복문)