R은 통계프로그래밍 언어로 일반인이 사용하기 쉽게 만든 언어이다.
그러나 필자는 프로그래머이고 비 프로그래머의 인식으로 접근하기 힘든면이 있다.
강의 또한 그러하다. 강의 곳곳에 프로그래머적인 시선이 들어있으니 참고하여 필요없으면 넘겨라.
참고:
R에서는 아예조건에 관련된 함수들이 굉장히 많다.
이번장에서 그걸 다룰건 아니고 R에서 프로그래밍을 하는데 필요한 조건문에 대해서 알아보도록하자.
다른 이름으로는 분기문이라고도 불리운다.
if문과 else문과 else if문
x<-25
if(x>0)
print(paste0(x,'는 양수'))
위의 코드는 x가 양수일때 양수라고 출력하는 코드이다.
여기서 paste0함수는 굉장히 중요한데 괄호속의 두 문자열을 합쳐주는 함수이다.
만약 여기서 if문이 길어져서 한줄안에 다 적을 수 없게 된다면 중괄호를 펼쳐주면 된다.
x<-25
if(x>0){
print(paste0(x,'는 양수'))
print('양수는 0보다 큰수')
}
만약 if조건문에 합당하지 않은 경우를 하고 싶다면 else캐이스를 해주면된다.
여기서 중요한건 else케이스의 위치인데 else는 반드시 if케이스의 마지막에 위치해야한다.
그래서 if문이 한줄일때는 약간 사용법이 골때리게된다.
x<--2
if(x>0)
print(paste0(x,'는 양수')) else
print(paste0(x,'는 음수'))
else 구문이 반드시 if케이스 마지막에 붙어야 한다는 룰 때문에 한줄씩 쓸 때 else를 if마지막에 붙혀줘야한다.
따라서 if else를 동시에 쓸경우 내용이 한줄일지라도 무조건 괄호를 쓰는게 룰이 되었다.
x<--2
if(x>0){
print(paste0(x,'는 양수'))
}else{
print(paste0(x,'는 음수'))
}
만약 if케이스가 여러개가 되야한다면 어떻게 할까?
위의 케이스로 예를들자면 0인 케이스가 있을 것이다.
이는 양수도 음수도 아니므로 따로 처리해 주어야한다.
이를 위한 문법이 바로 else if문법이다. 이 역시 앞부분에 붙혀줘야한다는 룰 때문에 무조건 괄호를 열어줘야한다.
x<-0
if(x>0){
print(paste0(x,'는 양수'))
}else if(x==0){
print(paste0(x,'는 양수도 음수도 아님'))
}else{
print(paste0(x,'는 음수'))
}
이제 x가 0일 경우 0으로 출력이 된다.
참고로 R에서 둘의 동등비교는 =가 아니라 ==이다.
=는 <-과 마찬가지로 오른쪽을 왼쪽에 대입해라는 뜻이라는걸 잊지 말라.
만약 ifelse의 내용이 길지않고 짧게 나타내고 싶다면 ifels라는 함수를 사용해도 무방하다.
이는 다른 언어에서 삼항연산자와 맥락을 같이한다.
x <- '영국인'
print(paste0('나는',ifelse(x=='한국인','한국인','외국인'),'이다.'))
ifelse함수에서 한국인인지 확인하고 한국인이 아니면 외국인을 반환하게된다.
따라서 위의 코드를 실행하면 나는외국인이다.가 출력된다.
switch
switch는 if else의 연장선이라고 할 수있는데 특정 캐이스들이 굉장히 많을 경우 switch문을 사용할 수있다.
단 switch라는 지시자가 존재하는건 아니고 switch라는 함수가 존재하며 우리는 switch함수를 사용하는 방식으로 사용한다.
x <- 'C++'
switch (x,
'C언어' = print('임베디드에서 자주 씁니다.'),
'Java' = print('관공서에서 자주 씁니다.'),
'C++' = print('게임에서 자주 씁니다.'),
print(paste0(x,'는 뭐하는 언어임?'))
)
위의 코드는 x의 값을 확인하여서 x의 값에 맞춰서 출력하게 된다.
만약 x가 C언어일경우, Java일경우,C++일 경우가 있는데 마지막한놈만 쌍이없다.
이놈은 디폴트 케이스로 어떤 케이스도 아닐때 저게 실행된다.
위의 코드를 이렇게 바꿔보자.
x <- 'R'
switch (x,
'C언어' = print('임베디드에서 자주 씁니다.'),
'Java' = print('관공서에서 자주 씁니다.'),
'C++' = print('게임에서 자주 씁니다.'),
print(paste0(x,'는 뭐하는 언어임?'))
)
위 코드의 경우 디폴트 케이스가 출력되어 R이 뭐하는 언어인지 물어보게 될것이다.
'Programming > R' 카테고리의 다른 글
[R-10]함수(function) (0) | 2017.11.18 |
---|---|
[R-09]반복문 (0) | 2017.11.18 |
[R-07]배열(Array) (0) | 2017.11.18 |
[R-06]리스트(list) (0) | 2017.11.18 |
[R-05]데이터 프레임(Data Frame) (0) | 2017.11.18 |