[R] 리스트(list)
- R
- 2022. 5. 3.
앞선 포스팅에서 데이터 타입에 대한 소개를 했었는데요.
이번 포스팅에서는 R에서의 리스트 사용방법입니다.
리스트는 벡터와는 다르게 다양한 종류의 데이터를 가지는 데이터 묶음입니다.리스트도 리스트 안에 넣어서 쓸 수 있습니다.
그래서 재귀형(recursive)이라고도 말합니다.
파이썬에는 딕셔너리와 리스트가 따로 있었지만 R은 리스트 하나로 모두 해결하는 느낌입니다. 그래서 리스트 안에서 key-value 형태로 각 값의 이름을 넣을 수 있습니다.
basic_list = list(1,2,3)
key_value_list = list(a=1,b=2,c=3) #key-value 형태
리스트는 숫자뿐만 아니라 문자형 벡터, 논리형 벡터, 데이터 프레임, 함수도 저장할 수 있습니다. R에서는 뭔가를 담아내는 기능으로 많이 쓰입니다.
sample_string = 'List'
sample_vector = c(1,3,5,7,9)
sample_matrix = matrix(1:12,nrow=3,ncol=4, byrow=T)
sample_scalar = 4
sample_vector2 = c('A','B','C')
sample_list = list(name= sample_string,vector_int = sample_vector, vector_str = sample_vector2, matrix=sample_matrix, scalar = sample_scalar)
# list 구성보기
str(sample_list)
리스트 내부의 원소 불러오기
내부의 원소를 불러오려면 $key로 불러옵니다.
위에서 만든 sample_list에서 불러오겠습니다.
>sample_list$name
[1] "List"
>sample_list$matirx
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
리스트도 인덱스가 매겨져 있어서 인덱스로도 불러올 수 있습니다. 그래서 key 값이 없는 경우나 for문을 숫자로 돌려야하는 경우에도 원소를 불러올 수 있습니다. $을 이용한 불러오기는 스칼라값으로 인식되고 인덱스로 불러오면 list로 인식됩니다.
>sample_list[1]
$name
[1] "List"
>sample_list[2]
$vector_int
[1] 1 3 5 7 9
리스트 안에 리스트가 있는 경우
리스트 안에 리스트를 넣는 경우에는 $를 활용해 리스트가 2개 있으므로 리스트 안에 리스트의 원소를 불러올 수 있습니다.
>list_in_list = list(x=list(a=c(1,2,3)))
>list_in_list$x$a
[1] 1 2 3
리스트 안에 벡터와 행렬의 값만 가져오기
리스트 안에 벡터나 행렬이 있으면 그 안의 원소를 가져오는 방법입니다. 대괄호를 이용하면 됩니다.
#대괄호 x
>sample_list[2][1]
$vector_int
[1] 1 3 5 7 9
#대괄호 o
>sample_list[[2]][1]
[1] 1
대괄호를 이용하는 방법은 리스트안에 원소가 너무 많으면 사실상 불가능합니다.
다행히도 $로 해당 벡터나 행렬을 불러와 인덱스로 불러올 수 있습니다.
>sample_list$vector_int[2]
[1] 3
>sample_list$matrix[3,2]
[1] 10
리스트 확인하기
데이터를 가져왔는데 이게 어떤 형식인지 알아야 할 때가 있습니다. list인 경우 is.list() 로 확인할 수 있습니다.
boolean으로 TRUE, FALSE로 출력됩니다.
>is.list(sample_list)
[1] TRUE
>is.list(sample_vector)
[1] FALSE
마치며
리스트에 대한 전반적인 설명을 했습니다.
파이썬과는 약간 달라서 R만의 리스트로 받아들이고 써야할 것 같습니다.
'R' 카테고리의 다른 글
[R] 데이터 프레임 다루기 (0) | 2022.05.06 |
---|---|
[R] 행렬(matrix) 다루기 (0) | 2022.05.05 |
[R] 벡터 다루기(내장함수와 연산) (0) | 2022.04.28 |
[R] 연산자 모음 (0) | 2022.04.26 |
[R] 벡터 다루기(입출력) (0) | 2022.04.18 |