티스토리 뷰

R

조건제어문(if, ifelse, for, while, repeat)

코린이도이 2021. 6. 6. 18:10

1. if 문

    • 조건에 따라 문장을 선택적으로 실행
    • 형식
      • if (조건식) {
        참일 때 수행할 문장
                         }
                else {
        거짓일 때 수행할 문장
                        }
    • > a<-5
      > if(a%%2==0){
      +   result<-"짝수"
      +   result
      +   }else{
      +     result<-"홀수"
      +     result
      + }
      [1] "홀수"

 

  • 조건 비교 연산자
연산자 기능
>,< 크다, 작다
>=,<= 크거나 같다, 작거나 같다
== 같다(equal)
!= 같지않다
  • 논리 연산자
연산자 기능
&& And
| Or
! not
    •  
> a<-75
> if(a%%3==0 && a%%5==0){
+   result<-"3의 배수이면서 5의 배수"
+ }else if(a%%3==0){
+   result<-"3의 배수"
+ }else if(a%%5==0){
+   result<-"5의 배수"
+ }
> result
[1] "3의 배수이면서 5의 배수"

 

2. ifelse 문

  • 다수의 데이터에 대한 조건을 한꺼번에 처리할 때 사용
  • 형식
    • ifelse(조건대상, 참일 때 실행문장, 거짓일 때 실행문장)
  • > a<-c(10,13,7,8,100)
    > if(a%%2==0){
    +   result<-"짝수"
    + }else{
    +   result<-"홀수"
    + }
    #첫번째 요소만 조건식에 적용됨
    #Warning message:
    #In if (a%%2 == 0) { :
    #  the condition has length > 1 and only the first element will be used
    > result
    [1] "짝수"
    
    #a에 저장된 모든 데이터들에 대한 조건판별이 이루어짐
    > ifelse(a%%2==0,"짝수","홀수")
    [1] "짝수" "홀수" "홀수" "짝수" "짝수"
    
    #조건비교결과를 벡터로 생성 후 데이터프레임 생성
    > result<-c(ifelse(a%%2==0,"짝수","홀수"))
    > df<-data.frame(a,result)
    > df
        a result
    1  10   짝수
    2  13   홀수
    3   7   홀수
    4   8   짝수
    5 100   짝수
    
    #ifelse(조건식,참,거짓) 작성
    > a<-c(10,13,22,15,9)
    > result<-ifelse(a>mean(a),"평균초과",ifelse(a<mean(a),"평균미달","평균값"))
    > df2<-data.frame(a,result)
    > df2
       a   result
    1 10 평균미달
    2 13 평균미달
    3 22 평균초과
    4 15 평균초과
    5  9 평균미달

3. 반복문 - for

  • 한 개 이상의 문장을 특정횟수만큼 반복처리
  • 형식
    • for (변수명 in 반복횟수){
          반복할 실행 문장
         }
  • #for 기본 예문
    > y<-0
    > for(x in 1:5){
    +   y<-y+x
    + }
    > y
    [1] 15
    
    #cat함수 이용해서 누적과정 표시하기
    > y<-0
    > for(x in 1:5){
    +   y<-y+x
    +   cat("1부터 ",x,"까지 합=",y,"\n")  #\n은 뛰어쓰기
    + }
    1부터  1 까지 합= 1 
    1부터  2 까지 합= 3 
    1부터  3 까지 합= 6 
    1부터  4 까지 합= 10 
    1부터  5 까지 합= 15
    
    #for -vector 접근 예문
    > a<-c(4,25,8,33,17,20)
    > evensum<-0
    > for(x in 1:length(a)){
    +   if (a[x]%%2==0) evensum<-evensum+a[x]
    + }
    > evensum
    [1] 32

4. 반복문 - while

  • 조건이 "참"인 동안 블록을 반복실행
  • 형식
    • while (조건){
        반복할 실행 문장
        }
  • #while 기본 예문 1
    > isum<-0
    > while(i<=10){
    +   isum<-isum+i
    +   i<-i+1
    + }
    > isum
    [1] 55
    
    #while 기본 예문 2
    > i<-1
    > isum<-0
    > while(i!=0){  #무한loop 생성
    +   isum<-isum+i
    +   cat("1부터",i,"까지 합=",isum,"\n")
    +   if (isum>=500) break  #조건을 만족하면 loop를 벗어남
    +   i<-i+1
    + }
    1부터 1 까지 합= 1 
    1부터 2 까지 합= 3 
    1부터 3 까지 합= 6 
    1부터 4 까지 합= 10 
    1부터 5 까지 합= 15 
    1부터 6 까지 합= 21 
    1부터 7 까지 합= 28 
    1부터 8 까지 합= 36 
    1부터 9 까지 합= 45 
    1부터 10 까지 합= 55 
    1부터 11 까지 합= 66
    1부터 12 까지 합= 78 
    1부터 13 까지 합= 91 
    1부터 14 까지 합= 105 
    1부터 15 까지 합= 120 
    1부터 16 까지 합= 136 
    1부터 17 까지 합= 153 
    1부터 18 까지 합= 171 
    1부터 19 까지 합= 190 
    1부터 20 까지 합= 210 
    1부터 21 까지 합= 231 
    1부터 22 까지 합= 253 
    1부터 23 까지 합= 276 
    1부터 24 까지 합= 300 
    1부터 25 까지 합= 325 
    1부터 26 까지 합= 351 
    1부터 27 까지 합= 378 
    1부터 28 까지 합= 406 
    1부터 29 까지 합= 435 
    1부터 30 까지 합= 465 
    1부터 31 까지 합= 496 
    1부터 32 까지 합= 528

5. 반복문 - repeat

  • 블록안의 문장을 반복실행
  • 반복영역안에서 if 조건을 지정하여 해당 조건에 만족되는 경우 loop를 벗어나게끔 작업함
  • 형식
    • repeat{
        반복할 실행 문장
        }
  • #repeat 기본 예문
    > a<-c(42,25,16,7,23,12,9)
    > i<-1
    > repeat{
    +   if(a[i]<mean(a)) break  #조건 만족 시 반복 loop 벗어남
    +   i<-i+1
    + }
    > a[i]
    [1] 16

'R' 카테고리의 다른 글

외부파일 읽어오기  (0) 2021.06.06
함수(function)  (0) 2021.06.06
데이터 프레임(data frame)  (0) 2021.06.06
리스트(list)와 행렬(matrix)  (0) 2021.06.06
벡터(vector)  (0) 2021.06.06
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함