작성자: admin 작성일시: 2016-09-12 17:38:24 조회수: 821 다운로드: 73
카테고리: R 태그목록:

R 조건문 기초

if ~ else 명령

if ~ else 명령을 사용하면 조건에 따라 다른 명령을 수행할 수 있다.

if ~ else 명령은 다음과 같이 만든다.

if (참 또는 거짓을 가지는 값) {
    조건이 참일 때 실행되는 명령들
} else {
    조건이 거짓일 때 실행되는 명령들
}

이 때 주의할 점은 참 또는 거짓일 때 실행되는 명령들은 중괄호 기호 안에 넣어야 한다. 중괄호 기호는 영어로 brace 라고 한다. 또한 코드를 읽기 편하게 스페이스(space) 키로 4칸 정도 들어쓰는 것이 관례이다.

"참 또는 거짓을 가지는 값"은 조건, 영어로 condition 이라고 부르며 반드시 소괄호 기호 안에 넣어야 한다. 소괄호 기호는 영어로 parenthesis 라고 한다.

어떤 수가 짝수인지 홀수인지는 2로 나눈 나머지를 보면 알 수 있다. 즉, 2로 나눈 나머지가 0이면 짝수이고 아니면 홀수이다.

In:
a <- 1

if (a %% 2 == 0) {
    cat("짝수")
} else {
    cat("홀수")
}
홀수

만약 어떤 수가 2자리 수의 짝수인지 알고 싶다면 다음과 같이 조건문을 사용한다.

In:
b <- 55

if ((b >= 10) & (b < 100) & (b %% 2 == 0)) {
    cat("2자리 수의 짝수이다.")
} else {
    cat("2자리 수의 짝수가 아니다.")
}
2자리 수의 짝수가 아니다.

연습 문제 1

  1. a 를 짝수로 하여 위의 코드를 다시 실행한다.
  2. b 를 다른 수로 하여 위의 코드를 다시 실행한다.

연습 문제 2

윤년은 2월 29일이 있는 해로 다음과 같이 정해진다.

  1. 서력 기원 연수가 4로 나누어 떨어지는 해는 윤년으로 한다.(2004년, 2008년, 2012년, 2016년, 2020년, 2024년 …)
  2. 이 중에서 100으로 나누어 떨어지는 해는 평년으로 한다.(1900년, 2100년, 2200년, 2300년, 2500년 …)
  3. 그중에 400으로 나누어 떨어지는 해는 윤년으로 둔다.(1600년, 2000년, 2400년 …)

변수 y의 값이 윤년이면 "윤년입니다"를 인쇄하고 아니라면 "윤년이 아닙니다"라고 인쇄하는 프로그램을 만든다.

if ~ else if ~ else 명령

조건으로 나누어야 하는 경우가 두가지가 아니라 여러가지가 있을 경우에는 다음과 같이 if ~ else if ~ else 명령을 사용할 수 있다.

if (조건1) {
    조건1이 참일 때 실행되는 명령
} else if (조건2) {
    조건1이 거짓이고 조건2가 참일 때 실행되는 명령
} else if (조건3) {
    조건1과 조건2가 거짓이고 조건3가 참일 때 실행되는 명령

...(생략)...


} else {
    지금까지의 어떤 조건도 참이 아니면 실행되는 명령
}

만약 10문제를 보는 시험에서 8개 이상을 맞으면 성적이 "A", 8개 미만이고 5개 이상을 맞으면 "B", " 5개 미만을 맞으면 "C"가 된다면 점수는 다음과 같이 계산할 수 있다.

In:
c <- 6

if (c >= 8) {
    cat("A")
} else if (c >=5) {
    cat("B")
} else {
    cat("C")
}
B

연습 문제 3

  1. c 를 다른 수로 하여 위의 코드를 다시 실행한다.

연습 문제 4

어떤 농장에서는 수박이 10kg이 넘으면 1등급, 그렇지 않고 7kg이 넘으면 2등급,, 그렇지 않고 4kg이 넘으면 3등급, 나머지는 4등급을 준다고 한다. 이 수박의 등급을 정하는 R 코드를 작성한다.

중첩 조건문

경우에 따라서는 조건문 안에 조건문이 또 있는 경우도 있다. 이러한 경우을 중첩, 영어로 nesting 이라고 한다.

조건문 내부에 다시 조건문을 쓰게 되면 다시 중괄호를 써야 하며 읽기 편하게 들여쓰는 것이 관례이다.

if (조건1) {
    조건1이 참일 때 실행되는 명령
    if (조건2) {
        조건1과 조건2가 모두 참일 때 실행되는 명령
    } else {
        조건1은 참이고 조건2는 거짓일 때 실행되는 명령
    }
} else {
    조건1이 거짓일 때 실행되는 명령
}

예를 들어 중학교에서 팔굽혀펴기 시험을 보는데 남자는 10번 이상을 해야 합격(Pass)이고 아니면 불합격(Fail)이다. 여자는 5번 이상을 해야 합격이라면 다음과 같이 프로그램을 만들 수 있다.

In:
sex <- "boy"
pushup <- 8

if (sex == "boy") {
    if (pushup >= 10) {
        grade <- "Pass"
    } else {
        grade <- "Fail"
    }
} else {
    if (pushup >= 5) {
        grade <- "Pass"
    } else {
        grade <- "Fail"
    }
}

cat(grade)
Fail

연습 문제 5

죄수의 딜레마는 게임 이론의 유명한 사례이다. (자세한 내용은 위키피디아를 참조한다.: https://ko.wikipedia.org/wiki/%EC%A3%84%EC%88%98%EC%9D%98_%EB%94%9C%EB%A0%88%EB%A7%88)

두 명의 범죄자 A, B가 체포되어 서로 다른 취조실에서 격리되어 심문을 받고 있다. 이들에게 자백여부에 따라 다음의 선택이 가능하다.

  • 둘 중 하나가 배신하여 죄를 자백하면 자백한 사람은 즉시 풀어주고 나머지 한 명이 10년을 복역해야 한다.
  • 둘 모두 서로를 배신하여 죄를 자백하면 둘 모두 5년을 복역한다.
  • 둘 모두 죄를 자백하지 않으면 둘 모두 1년을 복역한다.

죄수를 나타내는 변수 XA, XB 는 자백하는 경우에 True, 그렇지 않은 경우 False를 가지는 값이다. 이 때 변수 XA, XB 값에 따라 각각이 복역해야 하는 년 수를 변수 YA, YB 라고 할 때 YA, YB 를 계산하는 프로그램을 만든다.

질문/덧글

아직 질문이나 덧글이 없습니다. 첫번째 글을 남겨주세요!