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도 조건을 나타내는데 데이터 프레임을 만든다거나 프로그래밍 기능이 담긴 명령어를 쓰게 되면 사용할 수 없다(변수 선언, 데이터 프레임 만들기 등 불가).
그렇다면 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
다음은 반복문을 살펴보자.
'배우기 > 복습노트[R과 분석]' 카테고리의 다른 글
[실습문제] 2023. 11. 24.(금) (2문제) (0) | 2023.11.28 |
---|---|
[복습] R(programming language) 반복문(for문) + 복습후기(20231124) (0) | 2023.11.27 |
[실습문제] 2023. 11. 23.(목) (3문제) (0) | 2023.11.24 |
[복습] R(programming language) 자료구조(리스트) (4) + 복습후기(20231123) (0) | 2023.11.24 |
[복습] R(programming language) 문자열 함수 정리하기 (2) (0) | 2023.11.23 |