조건문은 조건이 참인지 거짓인지에 따라 달라지는 계산이나 상황을 수행한다.
조건문에도 종류가 여러가지 있다.
◎ if
if( 조건식 ) 실행문 |
> score = 85
> if(score >= 80) cat('합격')
합격
> if(score >= 80) print('합격')
[1] "합격"
print() 함수를 쓰면 출력결과 앞에 인덱스도 함께 출력된다.
> if(TRUE) {score = 100
+ cat('점수는', score, '점이다')}
점수는 100 점이다
> if(T) score = 100; cat('점수는', score, '점이다')
점수는 100 점이다
조건문 자리에 T or TURE 를 사용하면 실행문을 무조건 실행한다.
실행문이 두 문장 이상이면 중괄호를 사용하거나 문장들 사이에 세미콜론(;)을 붙여 조건문을 작성한다.
중괄호는 블록(block)의 의미로 사용된다.
> if(F) cat(score)
조건문 자리에 F or FALSE 를 사용하면 실행문을 실행하지 않는다.
◎ if else
if( 조건식 ) 실행문1 else 실행문2 if( 조건식1 ) 실행문1 else if( 조건식2 ) 실행문2 else ... if( 조건식n ) 실행문n else 실행문n+1 |
> score = 75
> if(score >= 80) cat('합격\n') else cat('불합격\n')
불합격
>
> if(score >= 80) cat('합격\n') else
+ cat('불합격\n')
불합격
>
> if(score >= 80) {cat('합격\n')
+ } else {cat('불합격\n')}
불합격
else 문은 {실행문1}과 같은 행에 작성하여야 한다. 그렇지 않으면 오류가 발생한다.
cat() 함수안에 '\n' 을 써준 이유는 cat() 함수는 코드를 각각 실행했을 때는 문제가 없지만 코드를 한꺼번에 실행했을 경우 아래 코드처럼 출력결과물 뒤로 코드가 붙어서 줄바꿈코드인 '\n' 를 써줘야 보기에 좋다.
> if(score >= 80) cat('합격') else cat('불합격')
불합격> cat('-------')
-------
> score = 75
> if(score >= 90) grade = 'A' else
+ if(score >= 80) grade = 'B' else
+ if(score >= 70) grade = 'C' else
+ if(score >= 60) grade = 'D' else grade = 'F'
> grade
[1] "C"
조건에 따라 경우의 수가 3가지 이상일 때 if else 문을 중복해서 사용한다.
> install.packages('stringr')
WARNING: Rtools is required to build R packages but is not currently installed. Please download and install the appropriate version of Rtools before proceeding:
https://cran.rstudio.com/bin/windows/Rtools/
Installing package into ‘C:/Users/small22/Documents/R/win-library/4.0’
(as ‘lib’ is unspecified)
URL 'https://cran.rstudio.com/bin/windows/contrib/4.0/stringr_1.4.0.zip'을 시도합니다
Content type 'application/zip' length 216099 bytes (211 KB)
downloaded 211 KB
package ‘stringr’ successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:\Users\Public\Documents\ESTsoft\CreatorTemp\RtmpiETJz9\downloaded_packages
> library(stringr)
> jumin = '123456-4234567'
> gender = str_sub(jumin, 8, 8) # 성별추출하기
> gender
[1] "4"
문자열의 일부분을 추출하기 위해 'stringr' 패키지를 설치하고 라이브러리에 올린 후 주민번호로 성별을 판별하는 두가지 if else문을 작성하였다.
> if(gender==1) cat('남자') else
+ if(gender==2) cat('여자') else
+ if(gender==3) cat('남자') else
+ if(gender==4) cat('여자') else cat('주민번호 양식 틀림')
여자
> if(gender==1 | gender==3) cat('남자') else
+ if(gender==2 | gender==4) cat('여자') else cat('주민번호 양식 틀림')
여자
◎ ifelse
ifelse( 조건식, 참, 거짓 ) ifelse( 조건식, 참, ifelse( 조건식, 참, ifelse( 조건식, 참, 거짓 ) ) ) |
> score = c(78, 85, 95, 45, 65)
> grade = ifelse(score >= 70, '합격', '실패')
> grade
[1] "합격" "합격" "합격" "실패" "실패"
ifelse() 함수의 조건식 부분에 벡터를 넣으면 결과도 벡터로 반환한다.
> grade = ifelse(score >= 70, '합격', ifelse(score >= 60, '보류', '실패'))
> grade
[1] "합격" "합격" "합격" "실패" "보류"
조건에 따라 경우의 수가 3가지 이상일 때는 ifelse() 함수의 거짓 부분에 ifelse() 함수를 다시 사용함으로써 표현할 수 있다.
> x = c(75, 85, 42, NA, 85)
> ifelse(is.na(x)==T, mean(x,na.rm=T), x) # 평균대체
[1] 75.00 85.00 42.00 71.75 85.00
> ifelse(is.na(x)==T, 0, x) # 0 대체
[1] 75 85 42 0 85
결측치가 포함되어있는 데이터도 평균이나 0으로 결측치를 대체할 수 있다.
◎ switch
switch( 비교문, 실행문1, 실행문2, 실행문3, ... ) |
> name = 2
> ans = switch(name, "kim", "han", "lee")
> cat(ans, '\n')
han
> switch(pwd, age=25, name="kim", id="small", pwd="1234")
에러: 객체 'pwd'를 찾을 수 없습니다
> switch('pwd', age=25, name="kim", id="small", pwd="1234")
[1] "1234"
switch() 함수의 첫번째 자리에 2를 입력하면 출력값은 2+1자리의 값이다.
또한 첫번째 자리에 key를 입력하면 해당 키의 값이 출력되는데 이때 key는 따옴표안에 넣어야 한다.
◎ which
> name = c("kim", "lee", "choi", "park")
> which(name == "choi")
[1] 3
which() 함수에 조건식을 입력하면 조건식에 만족하는 값의 위치를 반환한다.
<R 조건문 - if/ifelse/switch/which>
'R > Data Operation' 카테고리의 다른 글
R apply 계열 함수/replicate/sweep/aggregate (0) | 2020.11.16 |
---|---|
R 벡터 Vector 관련 내장함수 (0) | 2020.11.10 |
R 산술/관계/비교/논리연산자와 벡터연산 (0) | 2020.11.05 |
R 함수 Function - 함수정의/함수인자/재귀중첩함수 (0) | 2020.11.03 |
R 반복문 - for/while/repeat/break와 next (0) | 2020.11.03 |
댓글