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 상의 모든 객체를 제거하는 방법을 예시한다.