1 / 24

리스트

리스트. 2014 년 가을학기 손시운 ( ssw5175@kangwon.ac.kr ) 지도 교수 : 문양세 교수님. 리스트. 벡터는 모든 원소가 같은 형식을 가져야만 함 리스트는 다른 형 의 객체끼리도 결합이 가능 Python 의 Dictionary, Perl 의 Hash, C 의 Structure 와 같은 개념 리스트는 데이터 프레임 (ch.5) 등의 기본을 형성하는 중요한 역할. employee. 리스트의 생성 (1/3). list() 함수 : 리스트를 생성하는 함수

leroy
Download Presentation

리스트

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 리스트 2014년 가을학기 손시운(ssw5175@kangwon.ac.kr) 지도 교수: 문양세 교수님

  2. 리스트 • 벡터는 모든 원소가 같은 형식을 가져야만 함 • 리스트는 다른 형의 객체끼리도 결합이 가능 • Python의 Dictionary, Perl의 Hash, C의 Structure와 같은 개념 • 리스트는 데이터 프레임(ch.5) 등의 기본을 형성하는 중요한 역할 employee

  3. 리스트의 생성 (1/3) • list() 함수: 리스트를 생성하는 함수 • e.g.) 이름이 “Joe”, 연봉이 55000이며 노조에 가입한 직원의 데이터 • 위처럼 태그(구성 요소의 이름)를 지정하여, 데이터를 쉽게 표현할 수 있음

  4. 리스트의 생성 (2/3) • list() 함수 • 태그는 선택적 요소이므로 생략하여 사용할 수 있음 • 태그를 생략할 경우, 태그는 숫자 인덱스로 자동 지정 • 하지만 숫자 인덱스 대신 이름을 붙이는 편이 더 명확

  5. 리스트의 생성 (3/3) • 리스트는 벡터이므로 vector() 함수를 통해 생성이 가능 • vector() 함수: 벡터를 만드는 함수이며, mode 인수에 형식을 지정하여 사용

  6. 일반 리스트 연산 (1/7) • 리스트 인덱싱 (1/2) • 리스트의 구성요소에는 여러 방법으로 접근이 가능 • $ 기호를 사용하여 접근 하는 방법 • 다른 구성요소와 겹치지 않는 선에서 이름을 축약하여 접근하는 방법 • 인덱스에 구성요소의 이름을 넣어 접근하는 방법 • 구성요소의 숫자 인덱스를 이용하여 접근하는 방법

  7. 일반 리스트 연산 (2/7) • 리스트 인덱싱 (2/2) • 리스트에서 구성요소의 데이터 형으로 가져올 경우, 대괄호를 두 개([[) 사용 • 대괄호를 하나만([) 사용할 경우 결과는 리스트 • 결과로 가져오는 데이터는 같으나 데이터 형이 다르므로 유의하여 사용해야 함

  8. 일반 리스트 연산 (3/7) • 원소의 추가/삭제 (1/4) • 리스트는 벡터의 한 형태지만, 원소의 추가/삭제가 가능 • 리스트에서 원소의 추가/삭제는 매우 빈번히 사용 • 원소의 추가는 리스트가 생성된 후에만 가능

  9. 일반 리스트 연산 (4/7) • 원소의 추가/삭제 (2/4) • 구성 요소를 추가할 때도 벡터 인덱스를 사용할 수 있음

  10. 일반 리스트 연산 (5/7) • 원소의 추가/삭제 (3/4) • 리스트에서 해당 부분을 NULL로 설정하여 구성요소를 제거 • z$b가 삭제된 후, 원소의 인덱스가 1씩 이동됨

  11. 일반 리스트 연산 (6/7) • 원소의 추가/삭제 (4/4) • 리스트들을 합치는 것도 가능

  12. 일반 리스트 연산(7/7) • 리스트의 크기 확인 • 리스트는 벡터이므로 length() 함수를 사용해 크기를 확인할 수 있음

  13. 리스트의 벡터화 • unlist() 함수: 리스트를 벡터로 변환하는 함수 • 벡터 원소들의 이름은 원 리스트의 구성요소 이름에서 가져옴 • 리스트에서 가져온 벡터의 데이터 형이 문자열 • 벡터의 구성요소들은 모두 같은 데이터 형을 가져야 함 • 리스트를 벡터화할 경우, 리스트의 구성요소 중 최대로 포함할 수 있는 형태를 선택 • NULL < 이진수 < 정수형 < 실수 < 복소수 < 문자 < 리스트 < 표현식

  14. 리스트에 함수 적용 • lapply(), sapply() 함수: 리스트에 함수를 간편하게 적용할 수 있는 함수 • lapply() 함수: 리스트의 각 요소에 함수를 적용하고, 리스트를 반환하는 함수 • sapply() 함수: lapply() 함수의 결과를 벡터나 행렬로 반환하는 함수

  15. 재귀 리스트 (1/2) • 리스트 내에 리스트를 갖는 재귀적 구조의 리스트

  16. 재귀 리스트 (2/2) • 연결함수 c()를 통해 재귀 리스트 생성이 가능 • recursive 인수를 사용하여 “편평화flattening”가 가능 (벡터화)

  17. 확장 예제: 단어 위치를 리스트로 표현 • 영문으로 구성된 문서에 포함된 각 단어의 위치를 리스트로 표현

  18. 확장 예제: 단어 위치를 리스트로 표현 • 데이터 파일로부터 단어를 읽어 들임 • ‘단어’는 단순히 공백으로 구분된 문자들의 조합을 의미 • scan() 함수: 파일을 읽고, 구분자 단위로 구분하여 벡터를 생성 findwords<- function(tf) { txt <- scan(tf, "") }

  19. 확장 예제: 단어 위치를 리스트로 표현 • 함수에서 반환할 리스트 생성 • txt에 저장된 단어를 소문자화 findwords<- function(tf) { txt <- scan(tf, "") wl <- list() … return(wl) } findwords<- function(tf) { txt <- scan(tf, "") wl <- list() for (i in 1:length(txt)) { wrd <- tolower(txt[i]) } return(wl) }

  20. 확장 예제: 단어 위치를 리스트로 표현 • 리스트 인덱싱 사용하여 wl에 단어와 위치를 저장 • 존재하지 않는 인덱스의 경우, R은 NULL로 설정하므로 c() 함수 적용이 가능 findwords<- function(tf) { txt <- scan(tf, "") wl <- list() for (i in 1:length(txt)) { wrd <- tolower(txt[i]) wl[[wrd]] <- c(wl[[wrd]], i) } return(wl) }

  21. 확장 예제: 단어의 빈도수 분석 • 앞의 예제에서 구한 리스트 결과를 단어 빈도 순으로 정렬

  22. 확장 예제: 단어의 빈도수 분석 • 단어 리스트에 포함된 단어의 개수를 벡터에 저장 • length 함수를 리스트에 적용하여, 각 단어의 빈도수를 확인 • 빈도수가 적은 순서대로 리스트를 정렬하여 반환 • order() 함수: 벡터의 정렬된 값에 대한 인덱스를 반환 freqwl<- function(wrdlst) { freqs <- sapply(wrdlst, length) } freqwl<- function(wrdlst) { freqs <- sapply(wrdlst, length) return(wrdlst[order(freqs)]) }

  23. 확장 예제: 단어의 빈도수 분석 • 문서에 나타난 단어의 빈도수가 높은 10 %를 플로팅 • 2009년 뉴욕타임스에 실린 기사에 포함된 코드

  24. 과제 #2 • 임의의 영문 문서 데이터에서 빈도수가 높은 10%를 플로팅 • 예제 데이터가 아닌, 별도의 영문 문서 데이터를 수집 • 데이터는 10kB 이상, 100kB 미만 • 다른 학생과 데이터를 공유하지 않고직접 수집 • 앞서 진행한 예제와 동일한 방법으로 플로팅 • 제출 방법 • 과제는 ssw5176@kangwon.ac.kr로 제출 • 제목 양식: [학번][이름]HW#2 • 과제에 사용한 데이터, 함수 실행 과정 및 결과 값을 캡쳐 • 제출 기한은 다음 주 수업시간 전까지이며, 그 후에 제출할 경우 20% 감점

More Related