해당 포스트는 R에서 행렬(matrix)을 리스트(list)에 저장한 후 특정 연산을 수행하는 방법에 대해 소개합니다.

INTRO
행렬(matrix)은 R에서 많이 사용되는 데이터 프레임(Data frame)과 유사하여 데이터 조작이 낯설지 않으실 겁니다. 하지만, 리스트(list)에 저장된 행렬(matrix)을 조작하려는 경우에는 다른 코드 사용법을 알아야 하며 아래에서는 그 방법에 대해 설명합니다.
질문

풀이
1. 데이터 생성
문제에서 주어진 연산이 가능하도록 데이터를 생성하겠습니다. 먼저, mat
라는 행렬(matrix) 데이터를 생성한 후, 리스트(list) 타입으로 변환하여 info
라는 변수에 저장합니다.
# info라는 list에 mat 이라는 matrix 생성
# 원소는 c() 함수에 할당된 값들이며, 행의 개수는 2개로 설정
mat <- matrix(c(1, 11, 21, 31, 41, 51, 61, 71, 81, 91), nrow = 2)
mat
[,1] [,2] [,3] [,4] [,5] [1,] 1 21 41 61 81 [2,] 11 31 51 71 91
출력 결과를 보면, mat
변수에 2행 5열의 행렬이 예시와 같이 저장된 것을 확인할 수 있습니다. 이제 해당 변수를 info
라는 변수에 리스트(list) 타입으로 변환하여 저장하겠습니다.
info <- list(mat = mat)
info
$mat [,1] [,2] [,3] [,4] [,5] [1,] 1 21 41 61 81 [2,] 11 31 51 71 91
typeof(info)
[1] "list"
list()
함수를 이용해 정상적으로 리스트(list)안에 행렬이 저장된 것을 확인할 수 있습니다.
주의할 점
문제에서 주어진 연산을 보면 리스트(list)안에 저장된 행렬이mat
라는 이름으로 저장된 것을 볼 수 있습니다.
따라서, 행렬을 리스트로 변환하는 코드에서list(mat)
가 아닌list(mat = mat)
로 사용해야 합니다.
2. 데이터 추출
리스트 내 행렬의 2행 4열 값 출력
인덱스(index)나 이름(name)을 이용하면 리스트(list) 내 특정 변수를 사용할 수 있습니다. 해당 문제는 리스트 info
에 저장된 mat
행렬의 2행 4열의 값을 아래와 같이 출력하면 됩니다.
info$mat[2,4]
[1] 71
리스트 내 행렬의 3열 값을 2를 곱한 값으로 변경
위에서 사용한 방법을 활용하면 특정 열에 접근하여 값을 변경하는 것도 가능합니다. 먼저, 변경 전 현재 info
의 값을 확인해 보겠습니다.
info
$mat [,1] [,2] [,3] [,4] [,5] [1,] 1 21 41 61 81 [2,] 11 31 51 71 91
출력 결과를 보면, 대상 컬럼인 3열의 값은 [41, 51]
로 확인됩니다. 해당 열의 값에 2를 곱한 값으로 변경하는 코드는 아래와 같습니다.
info$mat[,3] <- info$mat[,3] * 2
info
$mat [,1] [,2] [,3] [,4] [,5] [1,] 1 21 82 61 81 [2,] 11 31 102 71 91
출력 결과를 살펴보면, 3열의 값이 [41, 51]
에서 [82, 102]
로 변경된 것을 확인할 수 있습니다.
마무리
R에서 리스트(list)는 데이터 프레임(Data Frame)보다 사용에 불편함이 있지만,
관련 링크
[1] 네이버 지식인
