본문 바로가기

배우기/복습노트[R과 분석]

[복습] R(programming language) 조건문(ifelse 함수, if문)

728x90
반응형

R에서 조건을 전달할 때에는 두 가지 방법이 있는데 ifelse함수와 if문이 있다.

 

ifelse 함수부터 확인해보자.

 

[ifelse 함수]

oracle의 decode 함수와 유사하며, 조건 별로 참과 거짓일 때 리턴값을 전달한다.

 

ifelse(test,            # 조건

           yes,           # 참일 때 리턴값(생략 불가)

             no)           # 거짓일 때 리턴값(생략 불가)

 

예) emp에서 부서번호가 10번이면 총무부, 나머지는 기타 부서로 출력하여라.

 

 

ifelse는 중첩도 가능하다.

 

예) emp에서 부서번호가 10이면 총무부, 20이면 인사부, 나머지는 재무부로 출력하여라.

 

 

oracle에서 decode와의 차이점은 decode에서는 = 경우에만 사용이 가능하나 R에서는 대소치환도 가능하다.

 

예) emp에서 급여가 2000 이하이면 C, 2000 초과 3000 이하이면 B, 나머지는 A로 출력하여라.

 

 

ifelse의 큰 단점이 있다. 

 

SQL에서 성능에 대하여 얘기한 적이 있다. 위의 UPDATE문과 아래의 UPDATE문의 성능을 보면 아래 UPDATE문으로는 작성하여서는 안된다. 기존의 NULL값일 때만 자료를 업데이트 하는 것이 아니라 모든 자료를 다 새로 업데이트 하는 것과 같기 때문에다. ifelse는 아래와 같은 방법으로 출력되는 것이므로 이럴 때 if문을 사용하면 좋다.

 

또한 ifelse는 복잡한 프로그래밍 처리는 불가하다. ifelse도 조건을 나타내는데 데이터 프레임을 만든다거나 프로그래밍 기능이 담긴 명령어를 쓰게 되면 사용할 수 없다(변수 선언, 데이터 프레임 만들기 등 불가).

 

 

728x90

 

 

그렇다면 if문을 살펴보자.

if문은 조건문으로, 조건의 참, 거짓에 따른 여러 프로그래밍 처리가 가능하다.

 

문법은 아래와 같다.

 

if (조건)  {

   참일 때 리턴 / 프로그래밍 기능 / 연산 등

} else if (조건) {

   참일 때 리턴 / 프로그래밍 기능 / 연산 등

} else {

   조건 2가 거짓일 때 리턴 / 프로그래밍 기능 / 연산 등

}

 

위 문법에 대입하여 풀었는데 아래와 같이 length에러가 난다.

 

emp$DEPTNO == 10 의 조건 결과가 여러 개가 나와서 오류가 발생한다.

여기서 반복문이 필요한 시점이며 반복문은 다음 게시글에 작성하도록 하고, 

위 문제를 SMITH 에 대한 부서번호가 10일 때 인사부, 20번일 때 총무부, 30번일 때 재무부 로 출력하여보자.

 

 

즉, 위의 결과처럼 조건의 결과, 논리 값 자체가 몇 개인가가 중요하다. 여러 개가 나오면 if문 자체가 불가하다.

 

아래 연습문제 세 문제를 풀어보자.

 

연습문제 1. emp 에서 SAL을 증가된 급여로 수정하여라. 단 10번 부서는 10%, 20번 부서는 20%, 30번 부서는 12%로 수정하여라.

 

연습문제 2. emp 에서 급여가 가장 많은 사원의 COMM을 급여의 10%로 수정하여라.

 

 

연습문제 3. 1987-04-17에 입사한 사람의 급여 등급을 출력하여라. 급여 등급은 3000 이하이면 B, 3000 초과이면 A

 

 

다음은 반복문을 살펴보자.

728x90
반응형