Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

천선생의 삶

[R] 데이터 유형에 따른 정리(4) - list 본문

Data Analysis/R Basic

[R] 데이터 유형에 따른 정리(4) - list

천선생 2019. 7. 8. 12:00

안녕하세요. 천선생입니다.

 

 지난 포스트까지 vector, matrix, array 에 대해서 알아봤는데요,

이 3가지 데이터 유형은 모두 배열을 기반으로 한 데이터 유형입니다.

따라서 다양한 데이터 유형을 저장할 수 없다는 점에서 큰 단점을 갖기도 합니다.

따라서 이번에는 이러한 단점을 극복하기 위해 필요한 list 에 대하여 알아보도록 하겠습니다.

 

- LIST?

 이전의 데이터 유형은 차원에 따른 모양을 가지며, 동일 데이터 타입만을 가질 수 있었습니다.

그러나 list의 경우, 데이터 타입과 데이터의 모양에 무관하게 저장이 가능합니다.

즉, 기존과는 다르게 '여러 데이터를 담아낸다.' 라고 받아들이시면 이해가 빠르실 것 같습니다.

각 서랍은 KEY라고 불리우는 인자로 이름붙여지며, 이는 Python의 dictionary와 비슷한 성질입니다.

list는 서랍장과 같다. 각 서랍에 위치한 데이터는 독립적!

 

- CODE

 리스트를 저장할 때는, list 라는 함수를 사용합니다.

list 함수 내부에서 각 KEY에 해당하는 데이터를 선언해 주는 방식으로 데이터를 저장합니다.

그러나 서랍에 데이터를 넣는다는 컨셉에 맞추어, 미리 선언된 데이터를 입력해보겠습니다.

#리스트 저장 예

A <- letters[1:10] # 문자형 벡터를 인덱스를 통하여 저장한다.
B <- matrix(1:20, 4, byrow = T) # 매트릭스 저장한다.
C <- array(1:12, dim = c(2, 2, 3))

D <- list(A_data = A, B_data = B, C_data = C) # 각 key의 이름을 지정할 수 있다.
# $A_data
# [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
# 
# $B_data
# [,1] [,2] [,3] [,4] [,5]
# [1,]    1    2    3    4    5
# [2,]    6    7    8    9   10
# [3,]   11   12   13   14   15
# [4,]   16   17   18   19   20
# 
# $C_data
# , , 1
# 
#       [,1] [,2]
# [1,]    1    3
# [2,]    2    4
# 
# , , 2
# 
#       [,1] [,2]
# [1,]    5    7
# [2,]    6    8
# 
# , , 3
# 
#       [,1] [,2]
# [1,]    9   11
# [2,]   10   12

 

- INDEXING?

 리스트에서 인덱스를 통하여 데이터에 접근하는 방법은 이전에 다룬 데이터 유형과는 약간 다릅니다.

또한 이후에 다루게 될 데이터프레임과도 밀접한 관련이 있으므로, 주의깊게 보시길 바랍니다!

리스트에서 기본적으로 접근하는 방법은 리스트명$KEY 로 각 서랍에 접근하게 됩니다.

만약 KEY 를 설정하지 않았다면 리스트명[[서랍의 층수]] 으로 접근할 수 있습니다.

대괄호 2개를 사용하여 접근하는 방법은 리스트에서 처음 등장하므로, 헷갈리지 않도록 주의하세요!!

#인덱싱 예

A <- letters[1:10] # 문자형 벡터를 인덱스를 통하여 저장한다.
B <- matrix(1:20, 4, byrow = T) # 매트릭스 저장한다.
C <- array(1:12, dim = c(2, 2, 3))

D <- list(A_data = A, B_data = B, C_data = C) # 각 key의 이름을 지정할 수 있다.

D$A_data # key를 통한 접근
# "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
D[[2]] # 층수를 통한 접근
#       [,1] [,2] [,3] [,4] [,5]
# [1,]    1    2    3    4    5
# [2,]    6    7    8    9   10
# [3,]   11   12   13   14   15
# [4,]   16   17   18   19   20

D[[2]][1, 3] # 접근한 데이터에서 인덱스를 통한 재접근

 마지막 D[[2]][1, 3] 부분을 보시면, 리스트의 강력함을 확인하실 것이라고 생각합니다.

즉, 불러온 차원(서랍)에서 인덱스를 통한 재접근이 가능합니다.

 

- 활용

 위에서 확인하셨듯이, 리스트는 데이터의 유형과 형태에 구애받지 않고 저장이 가능합니다.

심지어 리스트 안에 새로운 리스트를 저장하는 것까지 가능합니다!

이러한 리스트의 특징은 이후에 다루게 될 여러 연산함수와 더불어 모형적합에서 결과값 을 저장하는데 활용됩니다.

#리스트를 통한 결과값 저장 예제

A <- 1:20

res <- list(sum_A = sum(A), #sum 함수를 통한 벡터의 합
            summary_A = summary(A)) #summary 함수를 통한 요약통계량
# $sum_A
# [1] 210
# 
# $summary_A
# Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
# 1.00    5.75   10.50   10.50   15.25   20.00 
Comments