본문 바로가기

분류 전체보기

(116)
파일 입출력 이 절에서는 CSV로 저장된 외부 데이터 파일을 데이터 프레임으로 불러들이는 방법, 데이터 프레임을 CSV로 저장하는 방법을 설명한다. 프로그램 수행 중에 긴 시간이 소요되는 작업을 실행한 뒤에는 중간 중간 실행 결과를 저장해놓고 싶을 때가 있다. 이때 사용할 수 있는 R 객체를 바이너리 형태로 파일에 저장했다가 불러들이는 방법에 대해서도 설명한다. CSV 파일 입출력 CSV 파일을 데이터 프레임으로 읽으려면 read.csv()를, 데이터 프레임을 CSV로 저장하려면 write.csv()를 사용한다. 아래에 이 함수들의 프로토타입을 보였다. -read.csv : CSV 파일을 데이터 프레임으로 읽어들인다. read.csv( file, #파일명 geader=FALSE, #파일의 첫 행을 헤더로 처리할 것인..
아이리스 데이터 본격적으로 데이터 조작을 알아보기에 앞서, 앞으로 데이터 처리 및 기계 학습 기법의 예제로 사용할 아이리스(붓꽃(iris)) 데이터 셋에 대해 살펴보자. 아이리스는 통계학자인 피셔(Fisher)가 소개한 데이터로, 붓꽃의 3가지 종(setosa, versicolor, virginica)에 대해 꽃받침(sepal)과 꽃잎(petal)의 길이를 정리한 데이터다. 이 데이터는 R에 기본적으로 내장되어 있고, 이해하기 쉬우며 크기가 작고 기계 학습에서 인기 있는 분야 중 하나인 분류(Classification)에 적합한 데이터다. 이런 이유로 아이리스는 R뿐만 아니라 다른 데이터 분석이나 기계 학습 관련 라이브러리에서 자주 사용되고 있으므로 이 데이터를 알아두는 것 자체가 큰 의미가 있다. 아이리스의 각 행에 ..
함수의 정의 코드의 반복을 줄이거나 코드의 가독성을 높이려면 함수를 작성해 코드를 추상화해야 한다. 또, 함수를 작성하면 유닛 테스트를 사용해 해당 함수의 동작을 검증할 수 있다는 장점이 있다. 이 절에서는 사용자 정의 함수를 작성하는 방법에 대해서 살펴본다. 기본 정의 함수는 다음과 같은 기본 문법을 사용해 정의한다. fuction_namefibofibo(1) [1] 1 >fibo(5) [1]5 함수를 호출할 때는 인자의 위치를 맞춰서 값을 넘겨주는 방식, 인자의 이름을 지정해서 넘겨주는 방식 두 가지 모두 가능하다. 다음은 이 두 가지 방식을 모두 보여주는 예다. >ff(1,2) [1]1 [1]2 >f(y=1,x=2) [1]2 [1]1 그 외 함수 호출 방법을 대해 다양한 예를 '2.2 함수 호출 시 인자 지정'..
연산 이 절에서는 연산자와 벡터 연산, NA가 포함된 데이터에서의 연산에 대해서 알아본다. 연산자에서 특히 벡터 연산과 NA가 포함된 데이터를 다루는 방법은 다른 언어와 차이가 있는 부분이니 유의해서 보기 바란다. 수치 연산 지금까지 암시적으로 사용한 사칙연산(+,-,*,/)을 포함한 수치 연산에 대해 알아보자. 사칙 연산은 다른 언어와 크게 다르지 않지만 약간의 문법적 차이가 있다. 다음 표에 연산자와 함수를 정의했다. 연산자와 함수 의미 +,-,*,/ 사칙 연산 n %% m n을 m으로 나눈 나머지 n %/% m n을 m으로 나눈 몫 n^m n의 m승 exp(n) e의 m승 log(x,base=exp(1)) log_(base)(x). 만약 base가 지정되지 않으면 log_(e)(x)를 계산 log2(x)..
흐름 제어(조건문과 반복문) 이 절에서는 프로그래밍의 필수 요소가 되는 조건문과 반복문(if, for, while, repeat)에 대해서 알아본다. 문법은 대부분의 언어와 유사하므로 어렵지 않게 익힐 수 있을것이다. switch 문도 존재하지만 잘 사용하지 않으며, 대신 조건문을 많이 사용한다. if 먼저 조건에 따라 코드의 수행 여부를 결정하는 if 문에 대해 살펴본다. 다음은 if 문의 문법 구조를 정리한 표다. 문법 의미 if (cond) {cond가 참일 때 실행할 문장} else {cond가 거짓일 때 실행할 문장} 조건 cond가 참, 거짓인 경우에 따라 {}블록을 실행한다. 필요한 경우 else 블록을 지정할 수 있다. 다수의 TRUE, FALSE 데이터를 한 번에 처리한다면 ifelse() 함수를 고려할 수 있다. ..
타입 판별, 타입변환 타입판별 데이터를 처리하기 위해 여러 함수를 호출하다 보면 반환된 결과의 타입이 무엇인지 분명하지 않을 때가 많다. 이 경우 다음 함수들을 사용하여 데이터 타입을 손쉽게 판단할 수 있다. 함수 의미 class(x) 객체 x의 클래스 str(x) 객체 x의 내부 구조 is.factor(x) 주어진 객체 x가 팩터인가 is.numeric(x) 주어진 객체 x가 숫자를 저장한 벡터인가 is.character(x) 주어진 객체 x가 문자열을 저장한 벡터인가 is.matrix(x) 주어진 객체 x가 행렬인가 is.array(x) 주어진 객체 x가 배열인가 is.data.frame(x) 주어진 객체 x가 데이터 프레임인가 다음은 벡터, 행렬, 데이터 프레임에 class()를 적용하여 클래스를 구하는 예를 보여준다...
데이터 프레임 데이터 프레임(Data Frame)은 처리할 데이터를 마치 엑셀의 스프레드시트와 같이 표 형태로 정리한 모습을 하고있다. 데이터 프레임의 각 열에는 관측값의 이름이 저장되고 각 행에는 매 관측 단위마다 실제 얻어진 값이 저장된다. 예를 들어, 다음 성적 데이터와 같은 모습이 데이터 프레임에 저장되는 데이터의 전형적인 예이다. 성명 국어 영어 홍길동 80 94 김길동 97 100 박길동 85 97 이처럼 자연스럽게 데이터를 표현하는 데이터 타입이기 때문에 데이터 프레임은 R에서 가장 중한 데이터 타입이며, 많은 R함수에서 인자로 데이터 프레임을 받는다. 데이터 프레임 생성 아래에 데이터 프레임 관련 함수를 나열했다. -data.frame : 데이터 프레임을 생성한다. data.frame( #value 또는..
리스트 자료 구조 책에서 리스트(list)는 배열과 비교할 때 데이터를 중간 중간에 삽입하는 데 유리한 구조로 설명한다. 물론 그러한 장점은 동일하지만 R에서 리스트는 데이터를 접근한다는 관점에서 다른 언어의 해시 테이블 또는 딕셔너리로 종종 설명된다. 즉, 리스트는 '(키, 값)' 형태의 데이터를 담는 연관 배열(Associative Array)이다. 또 다른 리스트의 특징은 벡터와 달리 값이 서로 다른 데이터 타입을 담을 수 있다는 점이다. 따라서 "이름"이라는 키에 "홍길동"이라는 문자열 값을 저장하고, "성적"이라는 키에 95라는 숫자 값을 지정할 수 있다. 리스트 생성 리스트는 list()함수를 사용해 생성한다. -list : 리스트 객체를 생성한다. list(key1=value1, key2=value..