1. Introduction to R
R is a free software environment for statistical computing and graphics. It compiles and runs on a wide variety of UNIX platforms, Windows and MacOS.
Why do we use R?
- Freeware!!
- Flexible!!
- Fast updating!!
Limitation of R
- SPSS or Minitab are menu-based so easy to use
- R (as well as SAS) is language-based so hard to learn
- R has also a limitation on handling large-sized data, depending on your system
- Python (numpy+scipy+matplotlib) is another option.
Official Webpage : http://r-project.org
From CRAN (you can find a CRAN tab or http://cran.r-project.org/), install file and its source code can be downloaded. The current version is 3.0.1 (by Sep/02/2013). Also, a lot of packages are available in CRAN.
Some useful links are here:
- Rstudio (IDE for R) http://www.rstudio.com
- ggplot2 (R graphic package) http://ggplot2.org
- 한국 R 사용자모임 : http://r-project.kr
2. Starting R
1+1
## [1] 2
- 2 는 연산의 결과로 주어진다.
- 새로운 프롬프트 (>) 와 함께 새로운 줄에서 결과가 출력된다.
- [1] 는 해당값을 벡터로 인식하였을때 순서에 대응하는 인덱스이다.
10:40
## [1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
## [24] 33 34 35 36 37 38 39 40
- 24번째 값은 33이다.
- 콘솔창의 크기에 따라 나열되는 개수가 달라진다.
34
-4
## [1] 30
- 연산 34-4 이 두줄에 걸쳐서 수행됨.
- 콘솔창에 나타나는 + 는 덧셈연산자가 아니라, 두줄을 연결해 주는 프롬프트임.
2 * pi # pi is 3.141593
## [1] 6.283185
- # 는 주석문 임을 표시한다. 이후에 나오는 문장은 R 인터프리터가 무시한다.
- R 프로그래밍에서 주석문의 사용은 매우 유용하다.
3. 계산기로써의 R
다음 계산들을 위해 R을 사용해보자. 연산자 우선순위에 유의할 것.
4 + 5 * 7
## [1] 39
- 4+5×7
3 + 10 / ( 2 + 3 )
## [1] 5
- 3+10÷(2+3)
( 1/2 + 1/3 )^2 / ( 1/3^2 )
## [1] 6.25
( 10 - 4 * 2 )^2 / ( -2 )
## [1] -2
( 3 + ( 3 * ( 3 + 4 ) ) - 5 ) / 4
## [1] 4.75
2^5 ; 2**5
## [1] 32
## [1] 32
- 2^5 와 2**5 는 동일한 연산을 수행.
- ;를 이용하면 한 줄에서 복수의 명령어를 수행할 수 있다.
2^( 1/3 )
## [1] 1.259921
연산자(Operator) | 설명 |
{ | block operator |
( | parenthesis |
$ | extracting a component from a list or a data frame |
[,[[ | subscripts |
^,** | power operators |
- | negative operator |
: | sequence operator |
%*%,%/%,%% | matrix multiplication, quotient, remainer operator |
*,/ | multiplication, division |
+,- | sum, subtraction |
<,>,<=,>=,==,!= | logical comparision operators |
! | negation |
&,&&,|,|| | logical operators |
<-,=,-> | allocation operator |
- 연산의 우선순위는 아래로 갈수록 선순위로 계산된다.
- 확실하지 않다면 괄호를 이용하는 것이 안전하다. 하지만 많은 괄호는 가독성을 떨어뜨림에 유의하자.
sin( pi / 4 )
## [1] 0.7071068
sqrt( 2 )
## [1] 1.414214
exp( 5 )
## [1] 148.4132
log10( 20 ) ; log( 20 , base = 10 )
## [1] 1.30103
## [1] 1.30103
log( 20 )
## [1] 2.995732
- 삼각함수에 적용되는 각도는 라디안(radian)으로 사용해야 함.
- pi는 R에서 미리 정의된 상수로써 π 값에 대응된다.
- 로그는 디폴트로 밑이 자연대수(e)로 주어지며, 상용로그를 사용할 경우 함수 log10()를 이용하거나 log( x , base =10 )을 사용.
R에서 정의된 수학 함수
Function | Description |
abs() | absolute function |
ceiling(), floor(), trunc() | truncation functions |
exp() | exponential function |
gamma() | gamma function |
lgamma | log gamma function |
round(),signif(),zapsmall() | rounding function |
sign() | sign function |
sqrt() | square root |
cos(),sign(),tan() | sine, consine, tangent functions |
acos(),asin(),atan() | arcsigne, arccosine, arttangent functions |
cosh(),sinh(),tanh() | hyperbolic-sine, cosine, tangent funtions |
4. 객체(object)와 값의 할당(assignment)
log(2^(1/3)+4)
## [1] 1.660116
x1 <- 2^(1/3) # x1에 값을 할당
log(x1+4) # x1의 재사용
## [1] 1.660116
x2=0.5 # x2에 값을 할당
x2+2 # x2의 재사용
## [1] 2.5
- = and <- 는 assignment operator로써, 오른쪽의 값을 왼쪽의 변수에 할당한다.
3 + 7 -> y1
z1 <- 2 + 5
assign('w1',2^5)
y1; z1; w1
## [1] 10
## [1] 7
## [1] 32
L1 < -5 # not assignment
## Error in eval(expr, envir, enclos): object 'L1' not found
L1 = 0
L1 < -5
## [1] FALSE
L1_5
## Error in eval(expr, envir, enclos): object 'L1_5' not found
- <-을 사용할 때, <과 -는 반드시 붙여 써야 한다.
- 객체와 연산자 사이에 공란은 무시된다.
- assign() 함수를 통해 값을 할당하는 경우, "" 또는 ''을 이용하여 변수명을 character로 변환하여 사용한다.
- 변수명을 만들때 _ 를 삽입해도 된다. 하지만 S-PLUS는 _의 사용을 허용하지 않는다.
Naming convention rule
.scr = 5 # .(period) 를 변수명 시작으로 사용할 수 있다
.scr
## [1] 5
#국어점수 = 95 # 변수명에 한글사용 가능
#국어점수
kor.scr = 95
KOR.SCR # R은 대소문자를 구분한다
## Error in eval(expr, envir, enclos): object 'KOR.SCR' not found
KOR.SCR = 88
kor.scr; KOR.SCR
## [1] 95
## [1] 88
- 숫자로 변수명을 시작할 수 있다. (예: 5scr)
- 변수명은 _로 시작할 수 없다. (예: _scr)
ls()
## [1] "KOR.SCR" "L1" "kor.scr" "w1" "x1" "x2" "y1"
## [8] "z1"
objects()
## [1] "KOR.SCR" "L1" "kor.scr" "w1" "x1" "x2" "y1"
## [8] "z1"
- ls() 와 objects()는 리턴값으로 현재 사용중인 name space 상에 정의된 모든 객체의 이름을 출력한다.
tmp = 2 * pi
tmp
## [1] 6.283185
rm( tmp )
tmp
## Error in eval(expr, envir, enclos): object 'tmp' not found
ls()
## [1] "KOR.SCR" "L1" "kor.scr" "w1" "x1" "x2" "y1"
## [8] "z1"
remove( 'L1' , 'w1' )
ls()
## [1] "KOR.SCR" "kor.scr" "x1" "x2" "y1" "z1"
rm( list = ls() )
ls()
## character(0)
- rm() 과 remove()는 name space 상에서 지정한 객체를 제거한다.
- rm( list = ls() ) 는 name space 상의 모든 객체를 제거하는 방법을 예시한다.