시리즈:쉽게 R 수 있는 R

문서의 내용이 너무 쉬워서 오늘부터 프로그래밍 할 수 있을 것 같습니다.

이 문서에는 독자적으로 연구한 내용이 들어갑니다. 다른 사람의 의견을 존중하면서 무례하지 않도록 작성해 주시고, 의견 충돌 시 토론 문서에서 토론해 주세요.
리브레 프로그래밍 시리즈
초급
프로그래밍
중급
프로그래밍
고급
프로그래밍
Python
협업

R이란?[편집 | 원본 편집]

R (프로그래밍 언어) 항목을 참고. 요약하자면 R은 통계 분석 및 관련 프로그래밍에 최적화된 프로그래밍 언어, 또는 R을 이용하여 통계 및 기타 작업을 하는 소프트웨어를 의미한다.

R을 이용해야 되는 이유[편집 | 원본 편집]

자유도가 높다. 다른 프로그램들이 일반적인 RPG 게임 정도의 자유도를 보여준다면 R은 스카이림과 맞먹는 자유도를 보여준다. 더불어 기능을 확장하여 쓸 수 있는 패키지확장팩가 무지하게 많기 때문에 다양한 작업이 가능하다. 또한 무료이기 때문에 기업에서도 많이 쓴다.

프로그램도 가벼운 편. 비교적 컴퓨터 성능에 영향을 받지 않고 데이터를 빨리 처리해준다.

여담이지만 R을 충실히 해둔다면 유사한 형태의 객체지향형 프로그래밍 언어를 익힐 때 정말 유리하다. for문까지 익히고 가면 시리즈:쉽게 배우는 프로그래밍 입문 항목을 어느 정도 이해할 수 있다!

R을 이용하면 안 되는 이유[편집 | 원본 편집]

도망쳐! 학부생 수준에서는 보통 R을 쓸 필요가 없다. 일반 상용 소프트웨어를 이용하는 것이 훨씬 편리하고 쉬우며 결과도 잘 나올 가능성이 높다. 세상에는 EXCEL, Eviews, SPSS, SAS, STATA, MATLAB 같은 좋은 프로그램들이 많으며 R을 제대로 익히는 것보다 앞의 프로그램들을 전부 익히는 것이 빠를지도 모른다! 앞의 프로그램들이 유료라서 부담이 된다면 gretl이란 프로그램을 이용해도 된다.[1] 통계 분석에 R을 이용하기 위해선 R의 프로그래밍 언어를 익혀야 되기 때문에 R의 사용법을 익히는 것은 다른 소프트웨어를 배우는 것에 비해 훨씬 더 어렵다. 시간을 많이 투자해도 생각한 만큼 결과가 잘 나오지 않을지도 모른다.

설치 및 환경 설정[편집 | 원본 편집]

R Project 공식 웹사이트에 접속하여 다운 받으면 된다. 다운로드 페이지에 들어가면 수많은 링크가 뜨는데 당황하지 말고 가까운 지역을 찾아 다운하면 된다. 사실 지구 반대편에 위치한 곳을 이용해도 속도는 큰 차이가 없다.

사용에 도움이 되는 프로그램을 같이 설치해도 좋다. R Studio나 Tinn-R, RKWard 등이 있다. 이 중 가장 대중적으로 많이 쓰이는 프로그램은 R Studio.

R의 확장팩이라고도 할 수 있는 패키지의 설치 방법은 후술.

R을 써보자[편집 | 원본 편집]

본 문서는 R의 기본적인 문법 구조를 이해하고 데이터를 입력하고 출력하고 간단한 산수를 하는 것을 목표로 하고 있다. 엑셀을 비롯한 다른 통계 프로그램을 이용하면 10분이면 끝날 일을 엄청난 공을 들여 하게 될 것이다.(...)

R의 문법 구조[편집 | 원본 편집]

이 문서는 R 언어에 대한 설명과 예제로 이루어져 있다. 박스 안의 예제는 처음부터 끝까지 그대로 복사해서 R 스크립트, 혹은 명령 프롬프트에 붙여넣고 ↵ Enter를 누르면 결과값이 출력되는 것을 볼 수 있다.

시작[편집 | 원본 편집]

R의 모든 것은 객체(object)다. 함수, 연산자, 변수 모두. 객체의 종류에 대해서는 R의 데이터 기본형 항목을 참고하면 좋다.

화살표와 등호를 이용하여 객체에 값을 부여하여 객체를 생성할 수 있다. 아래는 3의 값을 갖는 libre라는 객체를 생성하는 R 코드다.

libre<-3      # libre=3 을 대신 입력해도 된다.
libre       #이제 libre를 호출하면 3이라는 값이 호출된다.

R의 데이터 기본형[편집 | 원본 편집]

R은 데이터를 처리할 때 데이터를 기본형에 따라 서로 다르게 분류하여 처리한다. 데이터 기본형에 대한 이해 없이 코드를 입력하면 오류가 날 가능성이 매우 높다. R에서 자주 쓰이는 데이터 기본형은 다음과 같다.

  1. numeric(수치형) : 정수 및 실수. 우리가 흔히 생각하는 실수의 개념과 거의 일치한다. 실수로 구성된 벡터도 numeric에 포함된다.
  2. logical(논리형) : TRUE(참)과 FALSE(거짓)이 여기 포함된다. 첫 글자만 딴 T,F와 1,0도 여기에 포함될 수 있다.
  3. complex(복소수형) : numeric과 마찬가지로 복소수로 된 벡터도 여기에 포함된다.
  4. character(문자형) : numeric, logical, complex가 아닌 나머지가 여기 다 포함된다고 생각하면 된다. 큰 따옴표 안에 넣어야 R이 character임을 인식한다.
  5. list(리스트) : 리스트. 해당 기본형에 대해서는 후술.
  6. function(함수) : 우리가 생각하는 그 함수가 맞다.

mode()함수를 통해 기본형을 확인할 수 있으며 as.~() 함수를 이용해 데이터의 형태를 변환하는 것도 가능하다. as.XXXX(libre)에서 XXXX자리에 원하는 데이터 기본형을 입력하면 입력한 기본형의 형태로 변환된다. 단 항상 변환되는 것은 아니다.

mode(libre)    #위에서 생성한 libre의 기본형을 알 수 있다. libre의 기본형은 수치형이다.
libre<-as.character(libre)    #libre를 문자형으로 변환. 
libre    #결과를 확인해보면 libre가 문자형인 "3"의 값을 갖는 것을 확인할 수 있다.
is.character(libre) 
#이 함수를 이용하여 libre가 문자형인지 아닌지 확인할 수 있다. character 자리에 다른 데이터형을 넣어서 확인해볼 수 있다.

데이터가 저장될 땐 위의 데이터 기본형과는 미묘하게 다르게 분류된다는 점은 유의할 것.

R의 데이터 구조[편집 | 원본 편집]

위와 마찬가지로 R에서는 데이터의 구조에 따라 처리하는 방식이 다르기 때문에 데이터의 구조에 대해서도 숙지해둘 필요가 있다.

벡터[편집 | 원본 편집]

하나 이상의 수치값, 문자값, 논리값 등으로 구성되는 데이터 구조다. 데이터의 수열, 혹은 데이터의 나열로 고등학교 수학시간에 배우는 수열과 유사한 개념이다. 벡터는 숫자, 문자, 논리값 중 한 가지만으로 구성할 수 있으며 여러 데이터 기본형을 섞어서 벡터를 만들 수는 없다.

벡터를 생성하고 합칠 때는 c()함수를 이용한다.[2]

ridibug.a<-3
is.vector(ridibug.a) #출력값은 TRUE. 단일한 값도 벡터로 처리함을 알 수 있다. 벡터는 R에서 가장 기본이 되는 데이터 구조다.
ridibug.b<-c(3,5,7) #이렇게 값을 일일이 입력하여 벡터를 생성할 수 있다. 
#값을 직접 입력하는 대신 seq()함수나 rep()함수를 이용하여 벡터를 생성할 수도 있다.
ridibug<-c(ridibug.a,ridibug.b) #c()함수를 이용하여 서로 다른 두 벡터를 결합하여 새 벡터를 생성할 수도 있다.

서로 다른 데이터 형태를 이용하여 벡터를 생성하면 R은 자동으로 모든 원소를 같은 데이터 형태로 변환해 벡터를 만든다.

#맨 위의 예제에서부터 이어짐. 모든 예제를 돌려 객체를 생성한 후 밑에 코드를 돌리기 바람.
libra<-c(ridibug,libre)
libra #벡터 내 모든 데이터가 character로 변환되었다.

벡터 내 원소의 개수는 벡터의 길이(length)가 되고, 원소의 데이터 기본형이 벡터의 데이터 기본형(mode)이 된다. mode()함수를 이용해 벡터의 기본형을 확인할 수 있으며 length() 함수를 이용해 벡터의 길이, 즉 벡터 내 원소의 개수를 확인할 수 있다.

Array[편집 | 원본 편집]
데이터프레임[편집 | 원본 편집]

작업공간 설정하기[편집 | 원본 편집]

작업공간이란?[편집 | 원본 편집]

현재 상태 확인하기[편집 | 원본 편집]

작업 공간에 어떤 변수와 함수가 정의되어있는지 알고 싶다면 ls함수를 사용하면 된다. 이 함수를 사용할 경우 변수의 이름만 확인할 수 있다. ls.str() 함수를 이용하면 자세한 정보를 알 수 있다.

ls() #작업공간에 정의된 변수가 있다면 해당 변수가 출력될 거고, 없다면 character(0)이란 결과값이 출력될 것이다.
ls.str()

당연히 정의된 변수를 제거할 수도 있다. rm()함수를 이용하면 특정 객체를 작업공간에서 지정하여 제거하는 것도 가능하다. rm(list=ls())를 입력하면 작업 공간 내에 정의된 모든 변수를 제거할 수 있다.

rm(libre, libra) #모든 예제의 코드를 돌렸다면, 이 함수를 이용해 libre와 libra 변수를 삭제할 수 있다.
ls() #libre와 libra가 출력되지 않음을 확인할 수 있다.
rm(list=ls()) ; ls() #작업 공간 내에 모든 변수가 지워졌음을 확인할 수 있다.

[편집 | 원본 편집]

오류가 나는 이유[편집 | 원본 편집]

다른 프로그래밍 언어와 마찬가지로 R도 수많은 이유로 인해 오류가 나게 된다. 아래는 오류가 나게 만드는, 자주 할 법한 실수를 모아둔 것.

  1. 괄호를 제대로 쓰지 않아서.
  2. 대소문자 구분을 하지 않아서.
  3. 따옴표를 쓰지 않았거나 위치가 잘못 되어있어서.
  4. 잘못된 종류의 괄호 이용.
  5. 한국어보단 영어가 여러모로 에러가 날 가능성이 적다. '_' 대신 '.'를 자주 쓰는 것도 좋다.

R을 이용하다 막힐 때[편집 | 원본 편집]

  • R의 기본 도움말 이용

help()함수나 함수 앞에 ?를 붙인 후 엔터를 누르면 함수에 대한 설명이 나온다. 연산기호에 대해 알고 싶다면 “”안에 넣어줘야 한다. 자세한 것은 아래의 예제를 참고할 것. 단, 설명이 다 영어라는 점과 어려운 함수일 수록 설명이 대충 써져 있을 확률이 높다는 것은 유의해야 한다.

help(library)
?library
?"%*%"
  • 검색

R은 책보다 구글 검색을 통해 더 쉽게 더 나은 해결책을 찾을 수 있다. 단 영어로 검색해야 원하는 답변을 찾을 가능성이 높다.

귀차니스트들을 위한 꿀팁[편집 | 원본 편집]

  • R에는 Built-in Constant라는 것이 존재한다.
 LETTERS
 letters
 month.abb
 month.name
 pi

다음과 같은데 글자 계속 반복해서 쓰기 귀찮을 때, 월을 입력할 때, 파이값을 가져다 쓸 때 편리하다.

  • 미리 저장된 데이터도 있다. 'data()'함수로 전부 확인 가능. R 연습을 위해 따로 데이터를 마련할 필요 없이 내장된 데이터를 가져다쓰면 된다.
  • 바깥에 괄호 표시를 해두면 이름을 지정하는 동시에 콘솔창에 출력도 가능하다.
 (Abs<-Letters[1:3])
  • 엔터 치기 귀찮으면 세미콜론(;)으로 구분해도 된다.
 3+4 ; (libren<-"yellow")
  • attach() 함수를 이용하면 굳이 dataframe$col.1 이런 식으로 표현할 필요 없이 col.1만 써도 소환이 가능하다. 다 쓰고 detach()를 해주는 것이 좋다.
 attach(iris)
 Species[3]
 detach(iris)
  • scientific notation을 해제하고 싶다면
 options(scipen=999)

을 이용하면 된다. 원상복구는 options(scipen=0)을 입력하거나 R을 껐다 켜도 된다.

각주

  1. 단 간단한 회귀분석만 지원하며 데이터 처리의 정확도가 앞의 프로그램들보단 떨어진다.
  2. c함수는 벡터 외에도 리스트나 다른 데이터 구조에도 적용 가능하다. 항상 벡터를 생성하는 함수가 아님에 유의.