9. 계산기로써의 R
• 산술 연산
o +(더하기), -(빼기), *(곱하기), /(나누기), ^ (승수)
R 입문 이윤환, yoonani72@gmail.com
10. 계산기로써의 R
• 논리 연산 : 결과를 참(TRUE)과 거짓(FALSE)으로 갖는
연산
연산자 설명
< Less than, binary
> Greater than, binary
== Equal to, binary
>= Greater than or equal to, binary
<= Less than or equal to, binary
& And, binary, vectorized
&& And, binary, not vectorized
| Or, binary, vectorized
|| Or, binary, not vectorized
R 입문 이윤환, yoonani72@gmail.com
11. 변수와 상수
• 상수
o 숫자 2의 의미가 변할 수 있을까?
o 1, 2, 3 … 등과 R의 문자열인 “a”, “abc”… 등은 그 의미가 숫자와 문자로 정해져
있다.
o 즉 표기 자체의 의미가 변하지 않는 것을 상수라고 하고 숫자와 큰 따옴표로 둘러
쌓여진 문자들은 상수로 사용된다.
• 변수
o 큰 따옴표로 둘러싸여지지 않은 알파벳은 자료를 담는 그릇이라 생각하자.
o 이 그릇은 대입연산자(<-, 부등호와 Dash)을 통해 값을 넣는다.
o 변수에는 상수값을 넣을 수도 있고 또 다른 변수를 넣을 수도 있다.
R 입문 이윤환, yoonani72@gmail.com
12. 변수와 상수
• 다음 상황에서 값은 뭐가 나올 것으로 생각하십니까?
R 입문 이윤환, yoonani72@gmail.com
13. Vector : 자주 사용되는 자료형
• x <- 5 의 예에서 x는 5라는 값 하나를 갖는 스칼라(Scalar) 자료
• 학생들의 키를 조사한다고 할 경우 학생 수 만큼 변수를 만들어서 값
을 입력하는 것은 어리석은 일
• 하나의 변수에 모든 학생들의 변수를 넣어 보관한다면 좀 더 쉽게 자
료를 관리할 수 있다.
• 함수 c(…)
o R Console 에서 help(c ) 라고 입력해 보자
R 입문 이윤환, yoonani72@gmail.com
15. Vector 연산
• Vector는 스칼라와 연산시 스칼라 값이 Vector 의 각 원소와 연산을
한다.
• Vector 끼리의 연산은
o 먼저 각 Vector의 원소의 개수가 같아야 한다.
R 입문 이윤환, yoonani72@gmail.com
16. Vector 연산
o Vector의 원소 개수가 서로 다를 경우에는 서로 배수의 관계에 있을 때 계산 가능
R 입문 이윤환, yoonani72@gmail.com
17. 다른 방법으로 Vector 만들기
• 연산자 : “:”
R 입문 이윤환, yoonani72@gmail.com
18. 다른 방법으로 Vector 만들기
• 함수 : seq(), rep()
seq(
from = 1,
to = 1,
by = n),
length.out = NULL,
...
)
R 입문 이윤환, yoonani72@gmail.com
19. 다른 방법으로 Vector 만들기
• 함수 : seq(), rep()
rep(
x = vector,
(times | each) = n,
)
R 입문 이윤환, yoonani72@gmail.com
20. Vector 특정 원소 추출
• Vector명 뒤에 대괄호([]) 쌍으로 특정 원소를 추출한다.
o 대괄호 값이 양수일 경우 : 해당 위치의 값을 가져온다.
o 대괄호 값이 음수일 경우 : 해당 위치의 값을 제외하고 가져온다.
o 대괄호에 논리연산이 들어갈 경우 : 해당 연산에 맞는 값을 가져온다.
R 입문 이윤환, yoonani72@gmail.com
21. Arrays and matrices
• Array
o 배열에 대한 수학적 의미와 비슷하게 생각하자.
• n 차원을 갖고 있다
o 배열의 생성
• dim : 속성으로 차원 vector를 갖는다.
1500개의 원소를
z는 3차원을 가지며
갖는 vector
1차원 : 3, 2차원 : 5, 3차원 : 100개의 원소
3 * 5* 100 = 1,500
R 입문 이윤환, yoonani72@gmail.com
22. Arrays and matrices
o 배열의 생성
• array() 이용
array(
data : vector,
dim : dimension vector,
[dimnames = NULL]
: 차원의 이름 list
)
R 입문 이윤환, yoonani72@gmail.com
23. Arrays and matrices
• Matrix
o 배열의 특별한 경우로 행과 열을 갖는 (즉, 2차원 배열) 배열을 Matrix 라 한다.
o Matrix 생성
• matrix() 함수 이용
matrix(
data : vector,
nrow = 1, ncol = 1,
: 행과 열의 수
byrow = FALSE,
: data를 행단위로
읽을지 여부
[dimnames = NULL]
: 차원의 이름 list
)
R 입문 이윤환, yoonani72@gmail.com
24. Arrays and matrices
• Matrix 생성
o cbind(), rbind() 이용
• cbind()는 주어진 Vector 혹은 Matrix를 열로 묶고 rbind()는 행으로 묶는
다.
R 입문 이윤환, yoonani72@gmail.com
25. Arrays and matrices
• Array indexing
o 앞선 3차원 배열의 경우
o 배열명[1st dim, , ]
• Ex) > z[1, ,] ; 1차원의 인덱스가 1인 원소 출력
2차원이 5, 3차원이 100이므로 원소의 개수는 500
1차원의 인덱스를 1로 고정한 나머지는
2차원 배열처럼 출력
R 입문 이윤환, yoonani72@gmail.com
26. Arrays and matrices
o 배열명[1st dim, 2nd dim, ]
• Ex) > z[1, 1,] ; 1차원의 인덱스가 1, 2차원의 인덱스가 1인 원소 출
력
3차원의 원소의 개수는 100이므로 100개 출력
R 입문 이윤환, yoonani72@gmail.com
27. Arrays and matrices
o 배열명[1st dim, 2nd dim, 3rd dim]
• Ex) > z[1, 1, 1] ; 1차원의 인덱스가 1, 2차원의 인덱스가 1,
3차원의 인덱스가 1인 스칼라 출력
R 입문 이윤환, yoonani72@gmail.com
28. Arrays and matrices
o Index Matrices
• Array의 특정 원소의 위치를 값으로 갖는 배열
• 특히 2차원 배열 즉, matrix에 값을 줄 때 각 행 별로 첫 열에 행, 두번째 열에
열 index를 부여한다.
R 입문 이윤환, yoonani72@gmail.com
29. Data Frame
• Matrix의 경우 서로 다른 자료형을 넣을 수 없다.
• 실제 자료들은 속성(열) 별로 서로 다른 자료형이 한데 섞여 있는 경
우가 많으므로 이럴 경우 Data Frame을 사용하면 유용하다.
• data.frame 함수
o 서로 다른 자료형 벡터에 대해 cbind() 한 효과와 유사
R 입문 이윤환, yoonani72@gmail.com
30. Data Frame
• Indexing
o Dataframe명$열이름
o Dataframe명[[열 번호]]
o Matrix와 같이 표현
R 입문 이윤환, yoonani72@gmail.com
31. Package 설치와 사용
• R Package
o R 기능을 확장하는 기능 모둠
o R을 사용하는 사용자들이 제작하고 등록한 함수, Data 등으로 구성
• Package 설치와 사용
o R Console 창에 다음과 같이 입력하자 (alr3 라는 package 설치)
> install.packages("alr3")
o 옆에 보이는 화면과 같이 어디서 해당 Package를
다운로드 받을 것인지 사용자가 선택하도록 한다.
• Korea 를 선택하자
o 방금 설치한 alr3 를 사용하기 위해 다음과 같이 입력하자
> library(alr3)
o alr3가 갖고 있는 자료 fuel2001이 있는지 확인하자.
> fuel2001
Drivers FuelC Income Miles MPC Pop Tax
AL 3559897 2382507 23471 94440 12737.00 3451586 18.00
…
R 입문 이윤환, yoonani72@gmail.com
32. 작업공간 설정 : setwd()
• 다음과 같이 C 드라이브에 “R_work”라는 디렉토리를 만들자.
• R Console에서 다음과 같이 입력해 보자.
> setwd(“c:R_work”)
R 입문 이윤환, yoonani72@gmail.com
33. Excel 파일의 import
• 다음 주소를 브라우저 창에 입력하고 다운로드를 클릭하
여 파일을 앞선 만든 “c:R_work”에 저장하자.
o http://j.mp/KXsVuE
R 입문 이윤환, yoonani72@gmail.com
34. Excel 파일의 import
• 다운로드 받은 fuel2001.xlsx 파일을 Excel로 연다.
o Excel 자체를 읽어들이는 xlsReadWrite 같은 Package도 있지만 Excel에서 자료
를 일반 Text로 변환하여 R에서 불러들인다.
• “파일” 메뉴의 “다른 이름으로 저장”을 클릭
R 입문 이윤환, yoonani72@gmail.com
35. • 파일 형식을 “CSV 쉼표로 분리(.csv)” 선택
R 입문 이윤환, yoonani72@gmail.com
36. • 파일 이름은 “fuel2001.csv”가 되도록 입력하고 저장
o 이후에 나오는 메시지는 현재 쉬트만 저장 가능하다는 알림과 엑셀의 기능이 빠진
순수 텍스트로 저장된다는 경고 메시지로 모두 “예”를 클릭한다.
R 입문 이윤환, yoonani72@gmail.com
37. • 저장된 파일을 메모장 등으로 열어보자.
• 앞서 엑셀에 저장된 내용을 행구분은 줄바꿈으로 그리고
열 구분은 쉼표(Comma)로 한 파일을 csv 파일이라고 한
다.
o 값들중에 쉼표를 포함하는 값은 큰 따옴표 등으로 묶는다.
R 입문 이윤환, yoonani72@gmail.com
38. • R에서 방금 생성한 fuel2001.csv 파일을 불러오기 위해
다음과 같이 입력하자
> f2001 <- read.csv("fuel2001.csv", header=T)
o fuel2001.csv 를 csv 포맷에 맞춰 읽어온다.
o header = T : fuel2001.csv 파일은 첫 행에 제목 줄이 있다. 즉, 데이터로 인식하지
말고 열 이름으로 인식하라
o 읽어온 자료는 f2001 이라는 이름으로 저장하라.
• 제대로 읽어 왔는지 다음과 같이 확인해 보자.
R 입문 이윤환, yoonani72@gmail.com
40. Graphics Windows
• win.graph() • dev.off()
o 그래픽 창의 활성화 o 현재 장치를 비활성화(끈다)
o Ex 한다.
• win.graph() • graphics.off()
• win.graph() o 모든 그래픽 장치를 끈다.
• win.graph()
• par() 함수
• dev.list() o mfrow, mfcol
o 활성화된 장치의 리스트를 o bg : 바탕화면 색깔
열람한다.
o fig : 분할된 창의 크기
• dev.set(which=n) o new : 기본값 ‘F’, 새로 고수
o 지정한 n 장치를 활성화 한 준 그래픽 함수 호출시 새로
다. 그릴 것인지 결정
• dev.cur()
o 현재 장치를 보여준다.
41. 고수준 그래픽 함수
• 저수준 그래픽 함수 vs 고수준 • Ex
그래픽 함수 > win.graph()
o 그림이나 그래프는 점, 선, 면 > x1 <- 1:5
으로 분해할 수 있는데 R은 이 > y1 <- x1^2
런 기초적인 기능 외에 그래프
의 여백, 좌표축등을 정의하는
> z1 <- 5:1
등 그래프를 그리는 기본적인 > mat1 <- cbind(x1, y1, z1)
함수는 저수준 그래픽 함수라 > par(mfrow=c(2, 3))
부르고 여러가지 저수준 그래 > plot(y1, main=“using index”)
픽 함수를 모아 하나의 완성된 > plot(x=x1, y=y1, main=“x1^2”)
그래프를 그리는 함수는 고수 > plot(mat1, main=“using
준 그래픽 함수라 부른다. matrix”)
• plot 함수 > plot(x1, y1, type=“l”)
o 가장 대표적인 함수로 데이터 > plot(x1, y1, type=“h”)
객체를 x-y 좌표에 그래프로 나 > plot(x1, y1, type=“n”)
타낸다.
42. 고수준 그래픽 함수
• type 인수
o “p” : 점(points)
o “l” : 선(lines)
o “b” : 점과 선
o “c” : “b”에서 점이 빠진것
o “o” : 겹침 점과 선
o “h” : 수직선(high density)
o “s” : 수평선 우선의 계단모양
o “S” : 수직선 우선의 계단 모양
o “n” : 출력하지 않음
43. 저수준 그래픽 함수
• 점을 만드는 함수 points • 선을 그리는 함수
o pch : 점의 모양 o abline : 좌표에 직선을 그린다.
• 1-25는 정해진 모양이며 그 이 • 기울기 b와 절편 a를 지나는
후는 ASCII 코드에 의한 점 모 직선
양 • x축에 평행이고 y의 값이 h인
o Ex 직선
> x <- rep(1:5, rep(5, 5)) • y축에 평행이고 x의 값이 v인
> y <- rep(5:1, 5) 직선
> • Ex
plot(1:5, type=“n”, xlim=c(0, 7.5), ylim > cars[1:5, ]
=c(0.5, 5.5)) > z <- lm(dist ~ speed, data=cars)
> points(x, y, pch=1:25, cex=2.5) > z$coef
> plot(cars, main=“abline”)
> text(x-
> abline(h=20)
0.4, y, labes=as.character(1:25), cex
=1.5) > abline(v=20)
> abline(a=40, b=4)
> abline(z, lty=2, lwd=2)
44. 저수준 그래픽 함수
• lines • arrows
o 좌표의 점들을 이어서 선을 그 o 화살표를 그린다.
리는 함수 o Ex
o Ex > plot(1:9, type=“n”, axes=F)
> plot(0:6, 0:6, type=“n”) >
> lines(c(1, 3), c(6, 6), lty=1) arrows(1, 9, 4, 9, angle=30, length=0.
> lines(c(1, 3), c(5, 5), lty=2) 25, code=2)
> lines(c(1, 3), c(4, 4), lty=3) >
arrows(1, 8, 4, 8, length=0.5, code=0)
> lines(c(1, 3), c(3, 3), lty=4)
>
> lines(c(1, 3), c(2, 2), lty=5) arrows(1, 7, 4, 7, angle=90, length=0.
> lines(c(1, 3), c(1, 1), lty=6) 1, code=1)
>
arrows(1, 6, 4, 6, angle=120, code=3)
45. 저수준 그래픽 함수
• segments > plot(x, y)
> s <- seq(length(x)-2)
o 좌표 점들을 분할해서 출력할 >
수 있으며 단일 선분이 아니라 segments(x[s], y[s], x[s+3], y[s+3], lt
벡터로 구성된 여러 점들을 한 y=1:3)
화면에 출력한다. > box(which=“outer”)
o Ex
> x <- runif(12); y <- rnorm(12)
> i <- order(x); x <- x[i]; y <- y[i]
> par(mfrow=c(2,1))
> plot(x, y)
> s <- seq(length(x)-1)
> segments(x[s], y[s], x[s+2], >
y[s+2], lty=1:2)
46. 고수준 그래픽 함수 II
• barplot o width
o 막대그래프를 생성한다. • 막대의 두께 지정
o height o space
• 막대그래프로 그릴 대상 자료 • 막대간의 간격
객체를 지정하며 인수값으로 o horiz
벡터나 행렬이 올 수 있다. • TRUE이면 수평으로 FALSE
• beside가 FALSE이면 열의 수 이면 수직으로
는 막대의 크기, 행의 수는 각 o density
막대에서의 마디의 크기
• beside가 FALSE이면 그룹지 • 막대기둥 내부를 채우는 사선
어 병열로 배열된 형태 의 밀도
o beside o angle
• 벡터형 출력 여부 • density를 사용할 때 사선의 각
도
• 4 by 5 행렬의 경우
o TRUE : 20개의 기둥
o col
o FALSE : 4개의 마디를 갖는 • 막대나 막대 성분을 위한 색
5개의 기둥 지정
o border
• 테두리 색
47. 고수준 그래픽 함수 II
• Ex
> bar.x <- round(runif(12)*50)
> bar.y <- matrix(bar.x, ncol=3, byrow=T)
> par(mfrow=c(2,2))
> barplot(bar.x, horiz=T, density=5)
> barplot(bar.x, density=15, angle=135)
> barplot(bar.x, col=rainbow(length(bar.x)))
>
barplot(bar.x, border=“red”, col=c(“lightblue
”, “mistyrose”, “lightcyan”, “lavender”))