Intro) 아래 내용은 R의 기본적인 문법이나 자주 사용되는 라이브러리에 대해 앞으로 정리한 것입니다. 강필성 교수님의 [데이터 분석을 위한 프로그래밍 언어] 강의와 기타 자료들을 토대로 한 내용이지만 야매로 정리하다 보니 오류가 있을 수도 있습니다. 피드백 주시면 빠르게 수정하도록 하겠습니다.

1) list 특징과 생성

list에 대해 살펴보도록 하겠습니다. list는 vector와 달리 이질적(heterogeneous)인 요소들로 구성이 가능합니다. 이 점 때문에 list를 handling하는 방식이 vector와는 살짝 차이가 있습니다. 리스트에서 인덱싱할 때는 2가지 방법이 있습니다. 대괄호([])를 2번 사용하거나 1번 사용할 수 있는데 이때 출력되는 결과물에 차이가 있습니다. 아래 스크립트를 직접 실행해보면서 차이를 보도록 하겠습니다. listA[[1]]와 같이 2번 사용하게 되면 결과는 element로 출력됩니다. 반면, listA[1]와 같이 1번 사용하게 되면 결과는 list형태로 출력이 됩니다.

# listA 생성
listA <- list(1, 2, "a")
print(listA)

# listA에 대괄호[] 2개를 사용하면 element로 호출
listA[[1]]

# listA에 대괄호[] 1개를 사용하면 list로 호출
listA[1]

# c()함수를 사용해 인덱싱 가능
listA[c(1,2)]

한편, list에도 vector처럼 이름을 부여할 수 있고 이름을 통해 인덱싱할 수 있습니다. 이름을 통해 호출할 때에는 대괄호([])를 2번 사용하거나 '$'기호를 사용해서 인덱싱할 수 있습니다. 아래 스크립트에 대한 결과물을 통해 확인이 가능합니다. 

# 벡터와 마찬가지로 이름을 부여할 수 있고 이름을 통해 호출 가능
names(listA)
names(listA) <- c("First", "Second", "Third")

# 이름을 통해 호출 할 때는 대괄호[] 2개를 사용하거나 $를 사용하여 호출
listA[["Third"]]
listA$Third

다음 스크립트는 list를 만드는 다양한 방법들을 보여주고 있습니다. 일반적으로 첫번째 방식이 가장 보편적으로 사용되지만 다양한 방법을 통해서도 list를 생성할 수 있다는 점을 알아두시면 됩니다. 

# list를 만드는 다양한 방법
# name과 value를 함께 list로 만들기
A <- list(name="lee", salary = 10000, union = TRUE)
print(A)

# value만을 가지고 list 만들고
B <- list("lee", 10000, TRUE)
names(B) <- c('name', 'salary', 'union')
print(B)

# vector()에 mode를 list로 하여 list를 만들고 이름과 값을 각각 부여 
C <- vector(mode="list")
C[["name"]] <- "lee"
C[["salary"]] <- 10000
C[["union"]] <- TRUE
print(C)

리스트 A, B, C 모두 값은 결과를 보임

2) list 응용

리스트에 새로운 값을 추가하거나 삭제하는 방법은 아래 스크립트를 통해 확인할 수 있습니다. C$office <- "frontier" 로 'office'라는 name에 'frontier'라는 value 값을 넣을 수 있고 반대로 C$salary <- NULL 을 통해 기존에 있던 salaray 값을 삭제할 수 있습니다.

# C에 새로운 value와 name 추가
C$office <- "frontier"
C

# C에서 salary에 해당하는 값 삭제
C$salary <- NULL
C

리스트에 새로운 값 추가하고 삭제한 결과

list 안에 list가 포함된 재귀적 list를 생성하고 이를 다시 vector로 분해하여 반환하는 unlist()까지 살펴보겠습니다. unlist()를 사용할 때 use.names = FALSE로 설정해주면 name 없이 value만 문자형 vector로 반환하게 됩니다. 

# 재귀list 생성
tmplist <- list(a = list(1:5, c("a","b","c")), b = "Z", c = NA)
tmplist

# list에서 element를 분해하여 문자형 vector로 반환
unlist(tmplist)
unlist(tmplist, use.names = FALSE)

# list에 함수 적용하기 전 A 생성
A <- list(1:3,25:29)
A

# lapply는 list형태로 반환하고 sapply는 vector나 matrix형태로 반환
lapply(A,median)
sapply(A,median)

'Python-R' 카테고리의 다른 글

[R] 데이터 타입 - Matrix  (0) 2022.07.06
[R] 데이터 타입 - Vector  (0) 2022.06.30

+ Recent posts