리스트 생성하기

  • 리스트는 벡터의 일종
  • 벡터 : atomic vector
  • 리스트: recursive vector
    > j <- list(name="Joe", salary=55000, union=T)
    > j
    $name
    [1"Joe"
     
    $salary
    [155000
     
    $union
    [1] TRUE
     
    > jalt <- list("Joe",55000,T)
    > jalt
    [[1]]
    [1"Joe"
     
    [[2]]
    [155000
     
    [[3]]
    [1] TRUE
     
    > j$sal
    [155000
    > j$salary
    [155000
    > j$salar
    [155000
    > # 리스트의 구성요소는 겹치지 않는 내에서 줄여서 사용가능하다.
    > z <- vector(mode="list")
    > z
    list()
    > z[["abc"]] <-6789
    > z
    $abc
    [16789

일반 리스트 연산

  • 리스트 인덱싱
    > j
    $name
    [1"Joe"
     
    $salary
    [155000
     
    $union
    [1] TRUE
     
    > j[1:2]
    $name
    [1"Joe"
     
    $salary
    [155000
     
    > j2 <-j[2]
    > j2
    $salary
    [155000
     
    class(j2)
    [1"list"
    > str(j2)
    List of 1
     $ salary: num 55000
    > j[[1:2]]
    다음에 오류j[[1:2]] : 첨자가 허용되는 범위를 벗어났습니다
    > j2a <- j[[2]]
    > j2a
    [155000
    class(j2a)
    [1"numeric"
  • 리스트에 원소 추가/삭제하기
    > z <- list(place="Korea",year=2013)
    > z
    $place
    [1"Korea"
     
    $year
    [12013
     
    > z$temp <- 23
    > z
    $place
    [1"Korea"
     
    $year
    [12013
     
    $temp
    [123
     
    > z[[4]] <- "good"
    > z
    $place
    [1"Korea"
     
    $year
    [12013
     
    $temp
    [123
     
    [[4]]
    [1"good"
     
    > z[5:7] <- c(F,T,T)
    > z
    $place
    [1"Korea"
     
    $year
    [12013
     
    $temp
    [123
     
    [[4]]
    [1"good"
     
    [[5]]
    [1] FALSE
     
    [[6]]
    [1] TRUE
     
    [[7]]
    [1] TRUE
     
    > z$temp <- NULL
    > z
    $place
    [1"Korea"
     
    $year
    [12013
     
    [[3]]
    [1"good"
     
    [[4]]
    [1] FALSE
     
    [[5]]
    [1] TRUE
     
    [[6]]
    [1] TRUE
     
    > c(list("Joe",55000,T),list(5))
    [[1]]
    [1"Joe"
     
    [[2]]
    [155000
     
    [[3]]
    [1] TRUE
     
    [[4]]
    [15
     
    > length(j)
    [13
  • 확장 예제: 텍스트 일치 확인하기
    > findwords
    function(tf) {
        # read in the words from the file, into a vector of mode character
        txt <- scan(tf,"")
        wl <- list()
        for (i in 1:length(txt)) {
            wrd <- txt[i]  # ith word in input file
            wl[[wrd]] <- c(wl[[wrd]],i)
        }
        return(wl)
    }
    > findwords("testconcorda.txt")
    Read 71 items
    $The
    [11
     
    $`[1]`
    [12
     
    $here
    [13
     
    $means
    [14
     
    $that
    [1]  5 42
     
    $the
    [1]  6 65
     
    $first
    [17
     
    $item
    [1]  8 15
    ...

리스트 구성요소와 값에 접근하기

  • 리스트 구성요서의 이름은 names() 함수로 확인 할 수 있다.
  • unlist()함수는 리스트를 벡터로 변환한다.
  • 벡터 이름 제거시 names()=NULL 이나 unname()함수를 사용할 수 있다.
    > j <- list(name="Joe",salary=55000,union=T)
    > names(j)
    [1"name"   "salary" "union"
    > ulj <- unlist(j)
    > j
    $name
    [1"Joe"
     
    $salary
    [155000
     
    $union
    [1] TRUE
     
    > ulj
       name  salary   union
      "Joe" "55000"  "TRUE"
    class(ulj)
    [1"character"
    > z <- list(a=2,b=30,c=1000)
    > y <- unlist(z)
    > y
       a    b    c
       2   30 1000
    class(y)
    [1"numeric"
    > names(y) <- NULL
    > y
    [1]    2   30 1000
    > y <- unlist(z)
    > y
       a    b    c
       2   30 1000
    > unname(y)
    [1]    2   30 1000
    > y
       a    b    c
       2   30 1000

리스트에 함수 적용하기

  • 행렬에 apply()함수를 적용한 것처럼 리스트에는 lapply()나 sapply()를 적용할 수 있다.
    > lapply(list(1:3,25:29),median)
    [[1]]
    [12
     
    [[2]]
    [127
     
    > sapply(list(1:3,25:29),median)
    [1]  2 27
  • 확장예제: 텍스트 일치 확인하기
    > wl <- findwords("testconcorda.txt")
    Read 71 items
    > alphawl