제어문이란?

  소스코드의 실행흐름(flow,순서)을 제어한다.
  조건에 따라 분기하거나, 코드를 반복실행 한다

 제어문 종류

  조건문, 반복문


1.조건문

  특정 조건을 만족하면 코드를 실행한다.(조건에 따라 코드를 분기한다)
  (if문, switch문)


2.반복문

  특정 코드(코드블록)을 반복 실행한다.
  (while, for, repeat)

*문장(statement), 수식(expression)

 문장: 동작을 수행하는 코드
 수식: 계산해서 결과를 반환

- 조건식

  코드의 실행결과가 TRUE 또는 FALSE 둘중에 하나로 표현되는 코드
  num <- 1
  num > 2  # 결과: FALSE
  num < 2  # 결과: TRUE

- 조건문

if문
  조건식의 결과가 TRUE(참)이면 중괄호 안의 코드를 실행한다.
  if (조건식) {# 블록의 시작
     # 조건식: 참인 경우, ex) 1>0
     조건식의 결과가 TRUE이면 실행할 코드
     print('A')
     print('B')
     ...
  }# 블록의 종료
  #키워드: if 예약어, 소괄호, 중괄호

if-else문
  조건식의 결과가 TRUE(TRUE)이면 if블록을 실행, FALSE(거짓) else블록을 실행(분기)
  if (조건식) { # if 블록
     조건식의 값이 TRUE이면 실행할 코드
  }else{ # else 블록
     조건식의 값이 FALSE이면 실행할 코드
  }
  # 주의 : else를 단독으로 사용할수 없다.
  # 응용 : 중첩된 if-else문
  if (조건식1){
  }else{
      if(조건식2){
      }else{
      }
  }

  * if문은 홀로 사용가능
  * else는 홀로 사용불가

else-if문
   조건식이 2개이상일때 사용하는 if-else문
   else{ if(){} } 의 축약형
   위에서 아래로 진행, 처음 TRUE인 구문만 실행

   if (조건식1){
      조건식1이 값의 TRUE이면 실행할 코드
   }else if(조건식2){
      조건식1의 값이 FASEL이고 
      조건식2의 값이 TRUE이면 실행할 코드
   }else if(조건식3){
      조건식1과 조건식2가 FALSE이면 실행할 코드
      조건식3이 TRUE이면 실행할 코드
   } # else if 반복
   ... 
   else{

   }

   * else-if문에서는 else가 생략가능하다
   * if없이 else-if사용불가
   
[좋은코딩습관1] if-else 중첩이 3개이상(depth) 사용 자제필요.(가독성이 떨어짐)
            -> else if문 대체하는게 차라리 좋다.

#if문
if(1==1){ #조건식, 조건식이 참일때 if문의 코드가 실행됨
  print("if문 실행됨")
}
if(1!=1){ #조건식
  print("if문 실행됨")
}

#if-else문
num <- 1
if (num>2) { # 조건식
  cat('[if절] num:', num)
}else{
  cat('[else절] num:', num) 
}

#else if문
num <- 5
if (num>=10) {
  cat('[if절] num:', num)
}else if(num>=5){
  cat('[else if절] num:', num)
}else{
  cat('[else절] num:', num) 
}

# 실습: 나이에 따른 성인/청소년/어린이/유아 분기처리
# 20살이상이면 성인, 14살이상이면 청소년, 8살이상이면 어린이, 8살 미만 유아
age <- 10
if (age>=20) {
  cat('[if절] age:', age, '==>성인')
}else if(age>=14){
  cat('[else if절] age:', age, '==>청소년')
}else if(age>=8){
  cat('[else if절] age:', age, '==>어린이')
}else{
  cat('[else절] age:', age, '==>유아')
}



- 참고
ifelse() 함수
  ifelse(조건식, 참일때 실행코드, 거짓일때 실행코드)
  *조건식에 해당하는 논리값이 여러개여도 순차적으로 사용가능

'''
#ifelse(FALSE, 1, 2)
ifelse(age>=20, "성인", "미성년자")

# ifelse 함수로 수정해보기
age <- 14
ifelse(age >= 20, "성인",
       ifelse(age >= 14, "청소년",
              ifelse(age >= 8, "어린이", "유아")))
'''

switch문
  비교 대상과 조건값의 일치 여부에 따라 결과값을 다르게 사용한다.
  switch(비교대상, 조건값1 = 결과값1, 조건값2 = 결과값2 ..,
                 조건에모두만족하지않으면 default값)

day <- "tuesday1"
switch(day, 
       monday = "월요일",
       tuesday = "화요일",
       wednesday = "수요일",
       "모름")
            
num1 <- 30
num2 <- 20
oper <- '-'
result <- switch(oper,
                 "+" = num1+num2,
                 "*" = num1*num2,
                 "없음") # 명시적으로 이름 부여
result

 



2.반복문


  특정 코드를 반복 실행
  종류: for, while, repeat

for문
  반복 가능 대상에서 요소를 1개씩 꺼내서 변수에 담으면 코드를 반복 실행한다.
  *R에서 벡터를 생성하는 방법중 하나로 콜론(:) 연산자를 사용
  ex) 
  # 1:5 -> 1,2,3,4,5의 연속된 숫자를 생성
  vec <- 1:5 # vec변수에 1,2,3,4,5 연속된 숫자를 저장한다.
  => 도식화 설명

  문법
  for (담아오는변수 in 반복대상){
    반복 실행할 코드
  }
  예시)
  for (idx in 1:10){  # 반복 횟수
     cat('idx:', idx) # 반복 실행
  }
  *반복=loop라고 표현하기도 한다.
  
  실행순서
    1. for문의 소괄호를 먼저 실행
    2. 값을 꺼내오고, 변수에 담기
    3. 중괄호를 실행
    4. 중괄호가 끝나면 다시 상단의 소괄호로 진입
    5. 다음번 값을 꺼내오고 중괄호 반복(단, 마지막이면 for문 종료)

#################
# 반복문

# for문
vec <- 1:5
vec

for(val in vec){
  cat("val:", val, "\n")
}

# 구구단 2단 출력
for(index in 1:9 ){
  # 2 * 1 = 2
  # ...
  cat("2 *", index, "= ",  2*index, "\n")
}

# 구구단 2단과, 3단 출력하기
for (i in 2:3){
  cat("--- ", i, "단 ---", "\n")
  for (j in 1:9){
    cat(i, j, "\n")
    #문제) 아래처럼해서 3단까지 출력되도록 cat문 작성
    # 2 * 1 =  2 
    # 2 * 2 =  4
    # ...
    #cat(i, "*", j, "= ",  i*j, "\n")
  }
}

 


while문

  while(조건식){
    반복 실행할 코드
  }
  *조건식이 참인 동안만 코드를 반복 실행한다.

  num<-1
  while(num<5){
    #반복 실행할 코드
    num <- num + 1
  }
  *조건식이 거짓이 안되면(계속 참이면) 무한루프(무한반복)에 빠진다.

반복문의 흐름제어


  break, next(다른언어의 continue)
  
  break : 하나의 반복loop를 탈출
  next  : 반복문의 조건으로 이동(next 아래의 코드는 실행되지 않음)

  break 사용예
  for(i in 1:5){
    if(i>3){
       break # for문의 블록을 탈출
    }
  }

  next 사용예
  num<-0
  while(num<5){
    if(num>=2){
      next
    }
    num <- num+1    
  }
  *while문은 종료조건을 잘 체크해야한다.

 


repeat문

  while(TRUE){}의 기능과 동일 # 무한루프

  repeat{ 
    반복 실행할 코드
    if(조건식){ # 종료조건 체크 
      break  
    }
  }
  
  *코드를 무한 반복 실행한다.
  *if문과 break를 통해서 종료조건을 체크해야한다.

# while문
num<-0
while(num<5){
  #반복 실행할 코드
  num <- num + 1
  cat("num:", num, "\n")
}


# 반복문의 흐름제어
#break 사용예
for(i in 1:5){
  if(i>3){
    break # for문의 블록을 탈출
  }
  cat("i:", i, "\n")
}

#next 사용예
num<-0
while(num<5){
  if(num>=2){
    next
  }
  num <- num+1
  cat("num:", num, "\n")
}

#repeat문
num <- 1
repeat{
  if (num %% 2 ==0){
    cat("num:", num, "\n")
  }
  
  #종료조건
  if (num>10){ break }
  num <- num + 1
}

 


 

이 링크를 통해 구매하시면 제가 수익을 받을 수 있어요. 🤗
    
    https://inf.run/CGyyb

 

R로 배우는 데이터 분석 첫 걸음 - 기초 문법부터 데이터마이닝 실습까지| Masocampus - 인프런 강의

현재 평점 4.8점인 강의를 만나보세요. 평소 통계가 낯설거나 통계에 자신 없던 분들도 R을 활용하여 쉽게 데이터 분석을 해볼 수 있도록 구성한 과정입니다. 놓치기 쉬운 R의 기초 문법과 데이터

www.inflearn.com

 

+ Recent posts