[R] 리스트(list)에 저장된 행렬(matrix)에서 특정값 출력

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

matrix-data-filtering-inside-list-in-r

INTRO

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

질문

matrix-data-filtering-inside-list-in-r
[출처] 네이버 지식인

풀이

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)보다 사용에 불편함이 있지만, 타 언어에서도 많이 쓰이는 구조이며 활용도가 매우 높은 자료 구조입니다. 간단한 리스트(list) 조작 방법부터 차근차근 익혀나가신다면 후에 많은 도움이 되실거라 생각합니다.


관련 링크

[1] 네이버 지식인