๋น ๋ฐ์ดํฐ ๋ถ์ ๋๊ตฌ R (3)
์์ฌ๊ฒฐ์ (Decision Making)
- ํ๋ ์ด์์ ์กฐ๊ฑด์ ํ๊ฐํ์ฌ ๊ทธ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ๋ค์ํ ํ๋ฆ์ผ๋ก ๋ช ๋ น๋ฌธ์ ์ํํ๋ ๊ตฌ์กฐ
- R์์๋ if๋ฌธ, if~else๋ฌธ, switch๋ฌธ์ ์ ๊ณต
- ์์ฌ๊ฒฐ์ ๊ตฌ์กฐ์ ์ฉ๋
if๋ฌธ : ์กฐ๊ฑด์ด ์ฐธ์ผ ๋๋ง ๋ช ๋ น๋ฌธ์ ์ํ
- ์กฐ๊ฑด์ด ์ฐธ(TRUE)์ธ ๊ฒฝ์ฐ์๋ง ๋ช ๋ น์ด ์ํ
- ๊ฐ์ฅ ๋จ์ํ ์์ฌ๊ฒฐ์ ๊ตฌ์กฐ
x<-36L
if(is.integer(x)){
print("x๋ ์ ์")
}
[1] "x๋ ์ ์"
if~esle๋ฌธ : ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ณ๊ฐ์ ๋ช ๋ น๋ฌธ์ ์ํ
- ์กฐ๊ฑด์ด ์ฐธ(TRUE)์ธ ๊ฒฝ์ฐ์ ๊ฑฐ์ง(FALSE)์ธ ๊ฒฝ์ฐ ์๋ก ๋ค๋ฅธ ๋ช ๋ น๋ฌธ์ ์ํํ๋ ์์ฌ๊ฒฐ์ ๊ตฌ์กฐ
x<-3.14
if(is.integer(x)){
print("์ ์์
๋๋ค")
}else{
print("์ ์๊ฐ ์๋๋๋ค")
}
[1] "์ ์๊ฐ ์๋๋๋ค"
switch๋ฌธ : ๋ค์ํ ๊ฐ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ณ๊ฐ์ ๋ช ๋ น๋ฌธ์ ์ํ
- ์กฐ๊ฑด์ด ์ผ์นํ๋ ๊ฒฝ์ฐ(case)์ ๋ช ๋ น๋ฌธ์ ์คํ
- ์กฐ๊ฑด์ด ๋ค์๋ก์ ๋ถ๊ธฐ๋ฅผ ๊ฐ์ง ๋ ์ ๋ฆฌ
- ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฌ๋ฆฌ ๊ธฐ๋ณธ๊ฐ(default)์ด ์์
x<-"han"
switch(x, "kim"="๊น", "lee"="์ด", "han"="ํ")
[1] "ํ"
๋ฃจํ(Loop)
- ํน์ ํ ๋ช ๋ น๋ฌธ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ฌ๋ฌ๋ฒ ์คํํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ ๊ตฌ์กฐ
- ์ข ๋ฅ : repeat ๋ฃจํ, while ๋ฃจํ, for ๋ฃจํ
repeat ๋ฃจํ
- ๋ฌดํํ ๋ฐ๋ณตํ์ฌ ๋ช ๋ น๋ฌธ์ ์คํํ๋ ๊ตฌ์กฐ
- if๋ฌธ๊ณผ break๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ณต์์ ํ์ถํ ์ ์์
i<-1
repeat {
i<-i+1
if(i==3) { #๋ฐ๋ณตํ๋ค i๊ฐ 3์ด ๋๋ฉด ์๋ ์คํํ break
print(i)
break
}
}
[1] 3
while ๋ฃจํ
- ์กฐ๊ฑด์ด ์ฐธ์ด๋ฉด ๋์ผํ ๋ช ๋ น๋ฌธ์ ๋ค์ ์คํํ๋ ๋ฃจํ
- ๋ช ๋ น๋ฌธ์ ์คํ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์กฐ๊ฑด์ด ๊ฑฐ์ง์ด ๋๋ฉด ๋ฐ๋ณต๋ฌธ์ผ๋ก๋ถํฐ ํ์ถํ๋ ๊ฒ์ด ๊ฐ๋ฅ
i<-1
while(i<3) { #i๊ฐ 3๋ฏธ๋ง์ธ ๊ฒฝ์ฐ ๊ณ์ ๋ฐ๋ณต
i<-i+1
}
i
[1] 3
for ๋ฃจํ
- ๋ฒกํฐ์ ๊ฐ ์ฑ๋ถ์ ๋ฐ๋ผ ๋ฐ๋ณตํ๋ ๋ฃจํ ๊ตฌ์กฐ
- ๋ฒกํฐ ์ฑ๋ถ์ ์์น(index)์ ์ผ์ผํ ์ ๊ทผํ์ง ์์ผ๋ฏ๋ก ๋ฒกํฐ ์ฑ๋ถ๋ณ ๋ช ๋ น๋ฌธ์ ์ํํ๋ ๊ตฌ์กฐ์ผ๋ ์ ๋ฆฌ
- ๋ฒกํฐ ์ฑ๋ถ์ ๊ฐ์ ๋์ ํ๊ธฐ ์ํ ๋ณ์ ์ง์ ํ์
v<-c(2,3,5,7,10)
s<-0 #s๋ณ์ 0์ผ๋ก ์ด๊ธฐํ
for(ve in v) { #v์์ ๋ค์ด์๋ ๋ณ์๋ค์ ve์์ ๋ฃ๋๋ค
s<-s+ve #s๋ณ์ ์์ s+ve๊ฐ์ ๋ฃ์ด๋ผ
}
print(s)
[1] 27
๋ฃจํ ์ ์ด ๋ช ๋ น๋ฌธ
break๋ฌธ : ํ์ฌ ์คํ์ค์ธ ๋ฃจํ๋ฌธ์ ์ค๋จํ๊ณ , ๋ฃจํ๋ฌธ ์ดํ ๋ช ๋ น๋ฌธ๋ถํฐ ์คํํ๋ค.
next๋ฌธ : ํ์ฌ ์คํ์ค์ธ ๋ฃจํ๋ฌธ์ ์ค๋จํ๊ณ , ๋ฃจํ๋ฌธ์ ์ฒ์์ผ๋ก ๋๋์๊ฐ ๋ช ๋ น๋ฌธ์ ์คํํ๋ค.
next์์
v<-1:10
for(ve in v) {
if(ve%%2 != 0) { # %%:๋๋จธ์ง ์ฐ์ฐ์
next
}
print(ve)
}
[1] 2
[1] 4
[1] 6
[1] 8
[1] 10
# ve๋ฅผ 2๋ก ๋๋ ๋๋จธ์ง ๊ฐ์ด 1์ด๋ฉด next(์ฒ์ for๋ฌธ)์ผ๋ก ๋๋์๊ฐ๋ค
# ์ฆ, 1~10์ซ์ ์ค ์ง์๋ง print๋ก ๋์ด๊ฐ
ํจ์(Functions)
- ํน์ ํ ์์ ์ ์ํํ๋ ๋ช ๋ น๋ฌธ๊ณผ ๊ตฌ์กฐ๋ฅผ ๋์ดํ ์งํฉ
๊ธฐ๋ณธ ํจ์(built-in functions) : R์์ ๊ธฐ๋ณธ์ผ๋ก ์ ์๋์ด ์๋ ํจ์
#์ฌ์ฉ ๋ฐฉ๋ฒ
<ํจ์๋ช
>(<์
๋ ฅ์ธ์1>,<์
๋ ฅ์ธ์2>,...)
<ํจ์๋ช
>(์
๋ ฅ์ธ์๋ช
1=<์
๋ ฅ์ธ์1>,์
๋ ฅ์ธ์๋ช
2=<์
๋ ฅ์ธ์2>,...)
#์์
mean(c(88,96,92)) #mean(ํ๊ท ์ ๋ด๋ ํจ์)๊ณผ cํจ์์ ํธ์ถ
png(file="result.png") #์
๋ ฅ์ธ์๋ช
์ ์ง์ ํ์ฌ ํธ์ถ
์ฌ์ฉ์ ์ ์ ํจ์(user-defined functions) : ์ฌ์ฉ์๊ฐ ์์ ์ ๋ชฉ์ ์ ๋ง๊ฒ๋ ํจ์๋ช , ๋ช ๋ น๋ฌธ, ์คํ๊ตฌ์กฐ, ์ ๋ ฅ์ธ์, ์ถ๋ ฅ์ธ์๋ฅผ ์ง์ ํ ํจ์
- ํ์ ์์ : ํจ์๋ช , function ํค์๋, ์ค๊ดํธ ๋ฑ
- ์ ํ ์์ : ์ ๋ ฅ์ธ์, ์ถ๋ ฅ์ธ์, ์ ๋ ฅ์ธ์๋ช ๋ฑ
# ์ฌ์ฉ์ ์ ์ ํจ์ ์์ฑ ๋ฌธ๋ฒ
<ํจ์๋ช
><-function((์
๋ ฅ์ธ์๋ช
1=)<์
๋ ฅ์ธ์1>,...) {
... #ํจ์๊ฐ ํธ์ถ๋๋ฉด ์คํํ ๋ช
๋ น๋ฌธ ๋ฐ ๊ตฌ์กฐ
}
#์์
myFunc<-function(v) { #์ฌ์ฉ์ ์ ์ ํจ์ myFunc()
s<-0
for(ve in v) {
s<-s+v
}
return(s)
}
myFunc(c(2,3,7) #์ฌ์ฉ์ ์ ์ ํจ์ ํธ์ถ
[1] 6 9 21