[R] 리스트(list)

반응형
    반응형


    앞선 포스팅에서 데이터 타입에 대한 소개를 했었는데요.
    이번 포스팅에서는 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] 벡터 다루기(입출력)

    [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

    댓글

    Designed by JB FACTORY

    ....