R은 벨 연구소 Becker 등에 의해 개발됐던 S language를 기반으로 통계 계산, 시각화를 위한 프로그래밍 언어를 포함한 개발환경이다. S language를 이용한 Insightful사의 S+는 S 언어를 이용한 상업용 소프트웨어이고, R은 공개소프트웨어 기반의 소프트웨어 이다.
R 프로그래밍 언어(줄여서 R)는 통계 계산과 그래픽을 위한 프로그래밍 언어이자 소프트웨어 환경이다.
뉴질랜드 오클랜드 대학의 로스 이하카와 로버트 젠틀맨에 의해 시작되어 현재는 R 코어 팀이 개발하고 있다. R은 GPL 하에 배포되는 S 프로그래밍 언어의 구현으로 GNU S라고도 한다. R은 통계 소프트웨어 개발과 자료 분석에 널리 사용되고 있으며, 패키지 개발이 용이하여 통계학자들 사이에서 통계 소프트웨어 개발에 많이 쓰이고 있다.
R의 문법과 통계처리 부분은 AT&T 벨 연구소가 개발했던 S를 참고했고, 데이터 처리부분은 스킴에 영향을 받았다. - 위키피디아
R 소개
개발자도 배우기 쉽지 않은 언어
함수형, 절차형 언어의 혼합
통계용어 난무
통계학자도 배우기 쉽지 않은 언어 – 프로그래밍의 어려움
자유로운 분석 추구 쉽다.
Object
R에서 Data는 객체(Object)로 표현하고 저장한다. 객체는 인덱스를 가진 구조를 가진 벡터이다.
객체 선언
일반 변수 선언 같이 객체는 대입연산자(“=”, “<-“, “<<-)을 통해 숫자, 문자, 논리형 및 4가지 상수 자료형 값을 넣을 수도 있다.
객체 이름은 알파벳, 숫자, “.”, “_“ 으로 시작한다
큰 따옴표로 둘러싸여지지 않은 이름은 객체로 사용한다
R은 대문자와 소문자를 구분합니다. 즉, abc, ABC, abC는 모두 다른 객체로 취급.
숫자로 시작할 수 없다.
예약어를 객체 이름으로 사용할 수 없다.
break else FALSE for function if in Inf
NA NaN next NULL repeat TRUE while
세미콜론 ; 으로 구문을 구분해 사용할 수 있다.
기본 자료형
자료 저장을 위해 R 에서 사용하는 기본 자료형은 하나의 객체이며 그 종류는 다음과 같습니다. (괄호 안의 영문은 R 내부에서 사용하면 자료 객체의 이름입니다.)
숫자형
정수 (integer)
실수 (numeric)
복소수 (complex)
문자형 (character)
큰따옴표로 둘러 쌓아 표현 : “abc”, “123” 등
논리형 (logical)
TRUE(T), FALSE(F)
특수한 상태를 나타내는 상수
NULL: 정의되지 않은 값
NA : Missing Value
-Inf, Inf : 음과 양의 무한대
NaN : 수의 연산에서 불능의 경우 표현 0/0, Inf/Inf 등
객체 대입과 접근
R에서 객체로 데이터 형식 없이 대입 연산자 =, <-, <<- 를 이용한다.
할당연산자
의미
=
일반적인 오른쪽 값을 왼쪽 변수에 할당
<-
우변의 결과를 좌변의 객체에
->
좌변의 결과를 우변의 객체
<<-
변수는 내부적으로 벡터로 저장되어 인덱스로 접근할 수 있다. 벡터 인덱스는 1부터 시작한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
> x <- 10 #변수 x에 스칼라 값 10을 대입 > x =10 > x [1]10 > x[0]#변수의 요소 접근 numeric(0)
>'hello'-> h > x <- 2; y <- 3; #세미콜론 > k <- 2 +6i#리터럴 > j <- 2 -3i#리터럴 > k [1]2+6i > k+j [1]4+3i
객체에 잘못된 대입의 결과
1 2 3 4
>1a <- 1 # 변수 1a에 1을 할당. 오류 Error: unexpected symbol in"1a" >if<- 1 # 변수 if에 1을 할당. 오류 Error: unexpected assignment in"if <-"
이렇게 할당한 객체를 확인하려면
1 2 3 4 5
> ls()# 현재 객체 목록 > objects()# 현재 객체 목록 [1]"h""j""k""x""y" > mode(h)# 데이터 형식 확인 [1]"character"
객체를 메모리에서 지우려면 rm() 함수를 사용한다.
1
> rm(객체명, 객체명, ...)
삭제 명령
1 2
> rm(x) # 객체의 삭제 > rm(list=ls()) # 모든 객체 삭제
Scala
스칼라 값은 하나의 단순한 숫자, 문자열 같은 값으로 R에서 변수, 객체의 요소 값을 말한다.
아래 같은 종류의 값을 스칼라 값이라 한다.
NA: “데이터 없음” 으로 is.na(x)로 확인 가능
NULL: 변수가 초기화 되지 않음을 의미
문자열: ‘’, “”로 묶인 문자열
진리값: TRUE, FALSE로 참, 거짓 표현
상수는
숫자에 의미를 두어 숫자 1,2,3.. 과 문자열인 “pi”, “constant”… 등을 상수로 정의해서 사용한다. 즉 표기 자체의 의미가 변하지 않는 것을 상수라고 하고 숫자와 큰 따옴표로 둘러쌓여진 문자들은 상수로 사용된다.
문자열 함수
1 2 3 4 5
> s <- paste("하나","1","둘","2")# 문자열 결합 [1]"하나 1 둘 2" > sp <- strsplit("안 녕 하 세 요"," ")# 문자열 분리 [1]"안""녕""하""세""요" > cat("문자열 출력","\n")# 문자열 결합후 출력
Arithmetic operators
R에서 사용하는 연산자는 +(덧셈), -(뺄셈), *(곱셈), /(나눗셈), %/%(정수나눗셈), %%(나머지), ^(제곱) 등이 있습니다. 우선순위는 표준적인 연산의 우선순위를 따르고, 괄호 안쪽의 수식, 지수 및 근호, 곱하기와 나누기, 더하기와 빼기 순이다.
‘지금 1억원을 받을래? 1년 뒤에 1억 천만원을 받을래?’ 이제 선택이 쉽지 않습니다. 선택을 위해서는 1년간의 이자율을 알아야 합니다. 1년간의 이자율이 5%라고 가정해보겠습니다. 지금 1억원을 받아 1년간 예금하면 1억 5백만원이 됩니다. 1년 뒤에 1억 천만원을 받는 것이 유리합니다. 만약 이자율이 15%라면 어떨까요? 지금 1억원을 받아 예금해 두면 1년뒤에 1억 1,500만원이 될 것이기 때문에 지금 1억원을 받는 것이 합리적입니다.
이자율이 3%일 때, 1억원을 10년간 예치 한 후 금액은?
10년 후 1억원을 받기 위해서 현재 투자해야 할 금액은?
1 2 3 4 5 6 7 8 9 10
> r <- 0.03 # 이자율 변수 r에 0.03을 할당 > n <- 10 # 기간 변수 n에 10을 할당 > PV <- 100000000 # 현재가치 변수 PV에 1억원을 할당 > FV <- PV *(1+r)^n # 미래가치 FV를 계산 > FV [1][1]134391638# 이자율 3%로 10년간 1억원 예치시 1억3천만원 수령 > FV <- 100000000 # 미래가치 FV에 1억원을 할당 > PV <- FV/(1+r)^n # 현재가치 PV를 계산 > PV [1]38554329
Package 관리
외부에서 제공하는 모듈을 Install, Update, Library 명령으로 관리할 수 있다. 패키지 설치는 Install 그리고 사용할 때는 Library 명령을 사용하고 패키지 갱신에 Update 명령을 사용한다.
PackageList <- as.data.frame(RawData) Names(PackageList) <- c(Package Name", "Description") 변수열 이름 조정 Head(PackageList, 5) : PackageList의 1~5 번째 까지의 관측치(Observation) 출력
Control+C, Control+V로 데이터 가져오기. 엑셀에서 데이터 영역 선택 후 Control+C
1
StudentList <- read.delim("clipboard"), read.delim은 header 자동 인식
R은 벨 연구소 Becker 등에 의해 개발됐던 S language를 기반으로 통계 계산, 시각화를 위한 프로그래밍 언어를 포함한 개발환경이다. S language를 이용한 Insightful사의 S+는 S 언어를 이용한 상업용 소프트웨어이고, R은 공개소프트웨어 기반의 소프트웨어 이다.
R 은 console을 통해 프로그래밍을 하거나 외부 에디터에서 작성한 소스를 컴파일해서 실행 할 수 있다.
macOS에서 R 시작시 다음 같은 경고를 보이면 macOS FAQ를 참고해 설정을 해주어야 한다.
[그림. ]
prompt
R을 실행하면 명령 입력 프롬프트 ‘>’을 볼 수 있다. 프롬프트에서 한 줄에 하나 혹은 한문장의 명령이 입력되고 실행된다.
1 2 3 4 5 6 7
print(“Hello World”) Factorial(10)# 계산 기능 Rep(x=”hello”, times=5) Rep(times=5): Error… Plot(10,10) Plot(c(5,7),c(20,30)) Plot(runif(100), runif(100))# runif()는 랜덤 넘버 생성 함수
에서 명령을 입력하고 엔터로 실행이 되지만 괄호((),{},[])가 닫히지 않으면 ‘+’ 프로프트에서 계속 입력할 수 있다.
> help()# 도움말 창 > help(ls)# 함수 ls()에 대한 도움말 >?ls # 도움말 단축키 ?로 help(ls) 호출 > help(">")# R의 예약어, 연산자 등은 ""로 > help("for")# 묶는다. >#특정 패키지에 대한 도움말 요청 > help(package="datasets") ># 일반 검색어를 이용해 도움말 검색 > help.search("Latex") >??"Latex" > ># 사용 예제 검색 > example(mean) mean> x <-c(0:10,50)