강의영상

- (1/1) if문

- (2/4) if - else 문

- (3/4) 중첩 (1)

- (4/4) 중첩 (2), 과제설명

if

- 아래와 같이 if (조건문) 표현식의 형태로 사용한다. (표현식은 컴퓨터에게 내가 내리는 명령어이다)

a= 2
if (a>0) print('a는 양수')
[1] "a는 양수"

- space를 임의로 넣어도 상관없다.

a=10
if    (a>0)    print('a는 양수')
[1] "a는 양수"
a=10
if  (a>0)    print('a는 양수')
[1] "a는 양수"

- enter를 넣어도 상관없긴하다.

a=10
if (a>0)
    print('a는양수')
[1] "a는양수"
a=10
if (a>0) 
    
    
    print('a는양수')
[1] "a는양수"
a=10
if 
    
    
    (a>0) 
    
    
    print('a는양수')
[1] "a는양수"

- 컴퓨터에게 내릴 명령이 2개이상일 경우? $\to$ {}을 이용한다.

잘못된예제

a=10 
if (a>0)
    print('a는양수')
    print('양수인 a의 값은 아래와 같다.') 
    print(a)
[1] "a는양수"
[1] "양수인 a의 값은 아래와 같다."
[1] 10
a=-10 
if (a>0)
    print('a는양수') ## 
    print('양수인 a의 값은 아래와 같다.') 
    print(a)
[1] "양수인 a의 값은 아래와 같다."
[1] -10
  • 에러메시지가 뜨지는 않았지만 잘못된 코드이다.

올바른 사용법: {}를 이용하여 명령들을 묶는다.

a=10 
if (a>0){
    print('a는양수')
    print('양수인 a의 값은 아래와 같다.') 
    print(a) 
}
[1] "a는양수"
[1] "양수인 a의 값은 아래와 같다."
[1] 10
a=-10 
if (a>0){
    print('a는양수') ## 
    print('양수인 a의 값은 아래와 같다.') 
    print(a)
}

- 아래와 같이 중괄호를 묶어도 상관없다.

a=10
if (a>0)
{
    print('a는양수')
    print('양수인 a의 값은 아래와 같다.') 
    print(a) 
}
[1] "a는양수"
[1] "양수인 a의 값은 아래와 같다."
[1] 10
a=10
if (a>0)
{
    print('a는양수')
    
    print('양수인 a의 값은 아래와 같다.') 
    
    
    print(a)}
[1] "a는양수"
[1] "양수인 a의 값은 아래와 같다."
[1] 10
a=10
if (a>0){
    print('a는양수')
    
            print('양수인 a의 값은 아래와 같다.') 
       
print(a)
                }
[1] "a는양수"
[1] "양수인 a의 값은 아래와 같다."
[1] 10
  • 위와같이 코드를 작성하면 안된다.

- if (조건문) 표현식

a=c(10,-10)
a
[1]  10 -10
a>0
[1]  TRUE FALSE
  • 이 문장이 참일까 거짓일까? $\to$ R은 첫번째 원소가 참이면 참이라고 판단한다.
a=c(10,-10)
if (a>0){
    print('a는 양수이다')
    print('양수인 a의 값은 아래와 같다.')
    print(a)
}
Warning message in if (a > 0) {:
“the condition has length > 1 and only the first element will be used”
[1] "a는 양수이다"
[1] "양수인 a의 값은 아래와 같다."
[1]  10 -10
  • 이러한 코드를 작성하지 말자.

if~else

- 아래와 같이 if (조건문) 표현식1 else 표현식2의 형태로 실행한다.

x=2
if (x>0) log(x) else print('x는양수이어야함')
[1] 0.6931472
x=1
if (x>0) log(x) else print('x는양수이어야함')
[1] 0
x=0
if (x>0) log(x) else print('x는양수이어야함')
[1] "x는양수이어야함"
x=-1
if (x>0) log(x) else print('x는양수이어야함')
[1] "x는양수이어야함"

- if 문과 if~else 문은 다른기능이다.

x=10
if (x>0)
    log(x) 
else 
    print('x는 양수이어야함')
Error in parse(text = x, srcfile = src): <text>:4:1: unexpected 'else'
3:     log(x) 
4: else
   ^
Traceback:
  • ?? 왜 에러가 나는가?

- 아래는 잘 실행된다.

if (x>0)    log(x)     else           print('x는양수이어야함')
[1] "x는양수이어야함"
if (x>0)    log(x)     else
    print('x는양수이어야함')
[1] "x는양수이어야함"

- 보통은 아래와 같이 사용한다.

x=0
if(x>0){
    log(x) 
}else{
    print('x는 양수이어야함')
}
[1] "x는 양수이어야함"

- 결국 한줄에 다 말하거나, {}를 적절하게 활용하면 된다.

- 아래와 같은것들도 가능

x=0
if (x>0){
    
log(x) 
    }else{
print('x는 양수이어야함')
        }
[1] "x는 양수이어야함"

- 아래는 불가능 (무조건 중괄호를 친다고 해결되는것이 아님)

x=0
if (x>0){
    log(x) 
}
else{
    print('x는 양수이어야함')
}
Error in parse(text = x, srcfile = src): <text>:5:1: unexpected 'else'
4: }
5: else
   ^
Traceback:

- 결국 아래와 같은 코드를 권장함. (주피터보다 Rstudio가 더 쓰기편하다)

x=0
if(x>0){
    log(x) 
}else{
    print('x는 양수이어야함')
}
[1] "x는 양수이어야함"

중첩

- 예제시작

x=10 
if (x>0){
    print(log(x))
}else{
    if(x==0){
        x=1e-100
        print('x=0에서는 log(x)가 정의되지 않으므로 x=1e-100의 값으로 바꾸어 계산하겠습니다.')
        log(x)
    }else{ 
        print('x가음수입니다.')
    }
}
[1] 2.302585
x=0
if (x>0){
    print(log(x))
}else{
    if(x==0){
        x=1e-100
        print('x=0에서는 log(x)가 정의되지 않으므로 x=1e-100의 값으로 바꾸어 계산하겠습니다.')
        log(x)
    }else{ 
        print('x가음수입니다.')
    }
}
[1] "x=0에서는 log(x)가 정의되지 않으므로 x=1e-100의 값으로 바꾸어 계산하겠습니다."
[1] -230.2585
x=-1
if (x>0){
    print(log(x))
}else{
    if(x==0){
        x=1e-100
        print('x=0에서는 log(x)가 정의되지 않으므로 x=1e-100의 값으로 바꾸어 계산하겠습니다.')
        log(x)
    }else{ 
        print('x가음수입니다.')
    }
}
[1] "x가음수입니다."

- 보통은 아래와 같이 함수 형태로 사용한다. (중괄호지옥 $\to$ Rstudio가 좀더 편리함)

mylogfun<-function(x){
    if (x>0){
        print(log(x))
    }else{
        if(x==0){
            x=1e-100
            print('x=0에서는 log(x)가 정의되지 않으므로 x=1e-100의 값으로 바꾸어 계산하겠습니다.')
            log(x)
        }else{ 
            print('x가음수입니다.')
        }
    }
}
mylogfun(0)
[1] "x=0에서는 log(x)가 정의되지 않으므로 x=1e-100의 값으로 바꾸어 계산하겠습니다."
[1] -230.2585

숙제

mysqrtfun()를 만들고

(1) x>=0 --> sqrt(x)

(2) x<0 --> 'x는 양수이어야합니다'

mysqrtfun(-2), mysqrtfun(2) 의 출력결과를 스크린샷으로 제출