Categories: R

R에서 제어문 (if-else, switch)

안녕하세요, 여러분! 오늘은 R과 함께 신나는 코딩 여행을 떠나볼까요? R을 이용하면 데이터 분석이 정말 재밌어져요! 마치 마법처럼 데이터를 다룰 수 있거든요. 그 마법 주문 중 하나가 바로 제어문이랍니다.

데이터 분석을 하다 보면 조건에 따라 다른 작업을 해야 할 때가 정말 많아요. R에서는 if-else 문switch 문을 사용해서 이런 상황들을 멋지게 해결할 수 있답니다. if 문의 기본 구조부터 시작해서 else 문 활용, 다중 조건 처리까지, 그리고 switch 문으로 코드를 효율적으로 작성하는 방법까지 차근차근 알아보도록 할게요. 자, 그럼 흥미진진한 R의 세계로 함께 떠나볼까요?

 

 

if 문의 기본 구조

R에서 제어문을 다루는 첫 번째 관문, 바로 `if` 문이에요! 마치 RPG 게임에서 갈림길을 만난 것처럼, if 문은 특정 조건에 따라 코드 실행의 방향을 결정하는 역할을 해요. R 프로그래밍의 세계에서 모험을 떠나기 위한 필수적인 나침반과 같죠. 자, 그럼 이 나침반의 작동 원리를 하나씩 뜯어보도록 할까요? ^^

if 문의 기본 형태

if 문의 기본 구조는 생각보다 간단해요. 마치 레고 블록처럼 조건과 실행할 코드를 차곡차곡 쌓아 올리면 돼요. 기본 형태는 if (조건) { 실행할 코드 } 이렇게 생겼어요. 괄호 안의 ‘조건’ 부분에는 참(TRUE) 또는 거짓(FALSE)으로 판별될 수 있는 표현식이 들어가고, 중괄호 안에는 조건이 참일 때 실행될 코드가 들어가요. 참 쉽죠?!

if 문의 예시

예를 들어, 사용자의 나이가 18세 이상인지 확인하는 코드를 작성한다고 해 볼게요. age라는 변수에 사용자의 나이가 저장되어 있다면, if (age >= 18) { print("성인입니다!") } 와 같이 쓸 수 있어요. 만약 age 값이 20이라면, 조건 age >= 18은 참이 되고, 중괄호 안의 print("성인입니다!") 코드가 실행되어 콘솔에 “성인입니다!”라는 문구가 출력될 거예요! 반대로 age 값이 15라면? 조건이 거짓이기 때문에 중괄호 안의 코드는 실행되지 않아요. 마치 숨바꼭질처럼 말이죠! ?

비교 연산자와 논리 연산자

여기서 중요한 포인트! 조건식을 작성할 때 비교 연산자(>, , >=, , ==, !=)를 사용하고, 논리 연산자(&, |, !)를 사용하여 여러 조건을 조합할 수도 있어요. 예를 들어, if (age >= 18 & gender == "남성") { print("성인 남성입니다!") } 와 같이 작성하면 나이가 18세 이상이고 성별이 남성인 경우에만 메시지가 출력되겠죠? 이처럼 if 문은 상황에 따라 다양하게 활용할 수 있어요. 마치 요리 레시피처럼 재료(조건)와 조리법(실행 코드)을 바꿔가며 원하는 결과물을 만들어낼 수 있는 거죠.

수치 데이터와 if 문

if 문은 단순히 참/거짓 판별뿐만 아니라, 수치 데이터를 다룰 때도 유용하게 쓰여요. 예를 들어, 특정 값이 0보다 큰지 확인하고 싶다면, if (value > 0) { print("양수입니다!") } 와 같이 간단하게 표현할 수 있죠. 만약 값이 0보다 작거나 같다면? 아무 일도 일어나지 않아요.

함수 호출과 if 문

if 문의 조건 부분에는 함수 호출이나 복잡한 연산식이 들어갈 수도 있어요. 예를 들어, is.numeric(value) 함수를 사용하여 변수 value가 숫자인지 확인하고 싶다면, if (is.numeric(value)) { print("숫자입니다!") } 와 같이 쓸 수 있어요. 이처럼 if 문은 R의 다양한 함수와 연동하여 더욱 강력한 기능을 발휘할 수 있답니다.

중괄호의 중요성

if 문을 사용할 때 또 하나 기억해야 할 점은 중괄호 {}의 사용이에요. 만약 실행할 코드가 한 줄이라면 중괄호를 생략할 수도 있어요. if (age >= 18) print("성인입니다!") 처럼요. 하지만 코드가 여러 줄이라면 반드시 중괄호로 감싸줘야 해요! 중괄호는 코드 블록을 명확하게 구분하고 가독성을 높여주는 중요한 역할을 하니까요.

자, 이제 if 문의 기본 구조를 어느 정도 이해하셨나요? 다음에는 else 문을 활용하여 조건이 거짓일 때 실행될 코드를 추가하는 방법을 알아볼 거예요. 더욱 흥미진진한 R 프로그래밍의 세계가 펼쳐질 테니 기대해 주세요! 😉

 

else 문 활용하기

if 문만으로는 세상 모든 조건을 다룰 수 없죠? 마치 짜장면만 먹을 수 없듯이 말이에요! 짬뽕도 먹고 싶고, 탕수육도 먹고 싶은 게 사람 마음 아니겠어요? ^^ R에서도 마찬가지랍니다. if 문으로 특정 조건을 검사하고, 그 조건이 거짓일 때 다른 코드를 실행하려면 어떻게 해야 할까요? 바로 else 문이 등장할 차례입니다! 마치 짜장면 다음 짬뽕처럼요!

else 문은 if 문의 단짝 친구라고 생각하면 돼요. if 문의 조건이 만족되지 않을 때, else 블록 안에 있는 코드가 실행되는 거죠. 참 쉽죠? 마치 짜장면이 싫으면 짬뽕을 선택하는 것처럼 간단해요! 이렇게 ifelse를 함께 사용하면 조건에 따라 다른 코드를 실행하는 논리를 구성할 수 있답니다. R 프로그래밍에서는 이런 조건문이 정말 많이 쓰여요. 그러니까 꼭! 잘 알아두셔야 해요!

사용자 나이 확인 예시

예를 들어, 사용자의 나이가 19세 이상인지 확인하는 코드를 작성한다고 생각해 봅시다. if 문으로 나이가 19세 이상인 경우 "성인입니다"라는 메시지를 출력하고, 그렇지 않은 경우(19세 미만인 경우)에는 "미성년자입니다"라는 메시지를 출력해야겠죠? 이럴 때 else 문을 사용하면 아주 간편하게 처리할 수 있어요.

age <- 17  # 사용자의 나이

if (age >= 19) {
  print("성인입니다")
} else {
  print("미성년자입니다")
}

위 코드에서 age 변수에 17이라는 값을 저장했어요. if 문은 age >= 19라는 조건을 검사하는데, 현재 age 값이 17이므로 이 조건은 거짓이 됩니다. 그렇기 때문에 else 블록 안에 있는 print("미성년자입니다") 코드가 실행되는 거죠! 만약 age 값이 25였다면? 당연히 "성인입니다"라는 메시지가 출력되었겠죠? 😊

else 문은 단독으로 사용될 수 없다는 점! 꼭 기억해 주세요. 항상 if 문과 함께 사용되어야 한답니다. 마치 짬뽕만 시킬 수 없는 것처럼요! (물론 시킬 수는 있지만, 보통은 짜장면이나 다른 메뉴와 함께 시키잖아요? 😉)

쇼핑몰 할인 쿠폰 적용 예시

자, 그럼 이제 좀 더 복잡한 예시를 살펴볼까요? 🤔 쇼핑몰에서 할인 쿠폰을 적용하는 코드를 생각해 보세요. 구매 금액이 5만 원 이상이면 10% 할인을 적용하고, 그렇지 않으면 5% 할인을 적용한다고 가정해 봅시다.

purchase_amount <- 35000 # 구매 금액

if (purchase_amount >= 50000) {
  discount_rate <- 0.1  # 10% 할인율
  print("10% 할인 쿠폰이 적용되었습니다!")
} else {
  discount_rate <- 0.05  # 5% 할인율
  print("5% 할인 쿠폰이 적용되었습니다!")
}

discounted_price <- purchase_amount * (1 - discount_rate)
print(paste("할인된 가격:", discounted_price, "원"))

이 코드에서는 구매 금액에 따라 다른 할인율을 적용하고, 최종 할인 가격을 계산하고 있어요. ifelse를 활용해서 조건에 따라 다른 로직을 실행하는 전형적인 예시라고 할 수 있죠. 이처럼 else 문은 R 프로그래밍에서 조건부 논리를 구현하는 데 필수적인 요소랍니다! ✨

else 문은 중첩해서 사용할 수도 있어요. 마치 짜장면, 짬뽕, 탕수육 세트처럼 말이죠! 하지만 너무 많이 중첩하면 코드가 복잡해지고 이해하기 어려워질 수 있으니 주의해야 해요! 다음에는 else if를 활용한 다중 조건 처리에 대해 알아볼게요. 기대해 주세요~! 😉

 

다중 조건 처리

자, 이제 R의 제어문 이야기를 하다 보니 어느새 다중 조건 처리까지 왔네요! 마치 미로 찾기처럼 복잡해 보일 수 있지만, 걱정 마세요~ 차근차근 알아가면 전혀 어렵지 않아요! if-else 문만으로도 충분히 여러 조건을 다룰 수 있지만, 조건이 많아지면 코드가 마치 스파게티 코드처럼 꼬여버리기 쉽죠.ㅠㅠ 가독성도 떨어지고, 나중에 수정하려면 머리카락이 쭈뼛! 서는 경험, 다들 있으시죠? 그럴 때 바로 이 '다중 조건 처리' 기술이 빛을 발한답니다! ✨

if-else문의 중첩

기본적인 if-else문의 중첩(nested if-else)을 생각해 보세요. 예를 들어, 사용자의 나이와 성별에 따라 다른 광고를 보여주는 코드를 작성한다고 가정해 볼게요. 만약 나이가 20세 미만이면 청소년용 광고, 20세 이상이면 성인용 광고를 보여주는데, 성인용 광고는 또 남성용과 여성용으로 나뉜다고 해봅시다. 이런 경우 if-else문을 중첩해서 사용할 수 있겠죠? 하지만 만약 조건이 10개, 20개로 늘어난다면…? 생각만 해도 아찔하네요!😱

ifelse() 함수의 활용

이럴 때 ifelse() 함수가 얼마나 유용한지 몰라요! ifelse() 함수는 벡터화된 if-else문이라고 생각하면 쉬워요. 즉, 여러 개의 값을 한 번에 처리할 수 있다는 말씀! 예를 들어, 1부터 100까지의 숫자가 담긴 벡터가 있고, 짝수는 '짝수', 홀수는 '홀수'라는 문자열을 할당하고 싶다고 해 볼게요. 일반적인 if-else문을 사용하려면 반복문을 돌려야 하지만, ifelse() 함수를 사용하면 단 한 줄의 코드로 처리할 수 있어요! 정말 간편하지 않나요? 😄

ifelse(1:100 %% 2 == 0, "짝수", "홀수")

이 코드 한 줄이면 100개의 숫자에 대한 짝수/홀수 판별이 끝나요! %%는 나머지 연산자라는 것, 잊지 않으셨죠? 😉 ifelse() 함수는 조건, 참일 때 값, 거짓일 때 값, 이렇게 세 개의 인자를 받아요. 조건에 맞는 값에는 참일 때 값이, 조건에 맞지 않는 값에는 거짓일 때 값이 할당되는 거죠. 백문이 불여일견! 직접 코드를 실행해 보면 그 효과를 바로 느낄 수 있을 거예요.

ifelse() 함수의 한계와 case_when() 함수

하지만 ifelse() 함수에도 한계는 있어요. 바로 조건이 참일 때와 거짓일 때, 두 가지 경우만 처리할 수 있다는 점이죠. 만약 세 가지 이상의 조건을 처리해야 한다면 어떻게 해야 할까요? 그럴 땐 dplyr 패키지의 case_when() 함수가 정답입니다! 🎉 case_when() 함수는 여러 개의 조건을 동시에 처리할 수 있도록 도와줘요. 마치 여러 개의 if-else문을 한 번에 작성하는 것과 같은 효과를 낼 수 있죠.

case_when() 함수 활용 예시

예를 들어, 학생들의 점수에 따라 등급을 매기는 코드를 작성한다고 해 볼게요. 90점 이상은 'A', 80점 이상은 'B', 70점 이상은 'C', 나머지는 'D'라고 한다면, case_when() 함수를 사용하면 다음과 같이 코드를 작성할 수 있어요.

library(dplyr)

점수 <- c(95, 82, 75, 68, 92, 88, 71, 65)

등급 <- case_when(
  점수 >= 90 ~ "A",
  점수 >= 80 ~ "B",
  점수 >= 70 ~ "C",
  TRUE ~ "D"  # 나머지 모든 경우
)

print(등급)

case_when() 함수는 조건과 값을 쌍으로 입력받아요. 조건에 맞는 값이 반환되고, 모든 조건에 맞지 않는 경우에는 마지막 TRUE ~ "D" 부분에 따라 'D'가 반환되는 거죠. case_when() 함수를 사용하면 코드가 훨씬 간결하고 읽기 쉬워진다는 것을 알 수 있을 거예요!👍

다중 조건 처리의 중요성

다중 조건 처리는 복잡한 로직을 구현하는 데 필수적인 기술이에요. R에서는 ifelse() 함수와 case_when() 함수를 활용하여 다양한 조건을 효율적으로 처리할 수 있답니다. 처음에는 조금 어려워 보일 수 있지만, 여러 예제를 통해 연습하다 보면 금방 익숙해질 거예요. 다음에는 더욱 흥미로운 주제로 찾아올게요! R과 함께 즐거운 코딩 시간 보내세요! 😊

 

switch 문으로 효율적인 코드 작성

if-else 문을 여러 번 중첩해서 사용하다 보면 코드가 복잡해지고 가독성이 떨어지는 경우가 종종 있죠? 마치 미로 속에 갇힌 것처럼 답답한 기분이 들기도 해요.ㅠㅠ 특히 조건이 많아질수록 코드는 더욱더 읽기 어려워지고, 유지보수도 힘들어진답니다. 이럴 때 바로 switch 문이 등장할 차례예요! 마법처럼 코드를 깔끔하게 정리해주는 switch 문의 매력에 한번 빠져볼까요? ^^

switch 문의 역할

switch 문은 하나의 변수 값을 여러 가지 가능한 값들과 비교하고, 일치하는 값에 따라 해당 코드 블록을 실행하는 제어문이에요. if-else if-else 구조와 비슷하지만, 특정 변수에 대한 여러 조건을 검사할 때 훨씬 간결하고 효율적이라는 장점이 있답니다. 마치 여러 갈래 길에서 이정표를 보고 원하는 길을 쉽게 찾아가는 것과 같아요!

R에서의 switch 문 구조

R에서 switch 문은 다음과 같은 기본 구조를 가진답니다.

switch(expression,
       case1 = value1,
       case2 = value2,
       ...
       casen = valuen,
       default = default_value  # 선택적
)

expression 부분에는 비교할 변수나 표현식이 들어가고, case1, case2, ... casen에는 비교할 값들이 위치해요. 만약 expression의 값이 case1의 값과 일치하면 value1에 해당하는 코드가 실행되고, case2의 값과 일치하면 value2에 해당하는 코드가 실행되는 방식이죠! 참 쉽죠? defaultexpression 값이 어떤 case에도 일치하지 않을 때 실행되는 코드 블록이에요. default는 선택적으로 사용할 수 있답니다. 마치 예상치 못한 상황에 대비한 비상 계획 같은 거죠!

switch 문 사용 예시 (if-else 문과 비교)

자, 그럼 실제 예시를 통해 switch 문의 위력을 직접 확인해 볼까요? 만약 사용자의 입력값에 따라 다른 메시지를 출력하는 프로그램을 작성한다고 가정해 봐요. if-else 문을 사용하면 다음과 같이 코드가 길어질 수 있어요. 으악! 보기만 해도 머리가 아프네요! ㅠㅠ

user_input <- readline(prompt = "숫자를 입력하세요: ")

if (user_input == "1") {
  print("입력하신 숫자는 1입니다.")
} else if (user_input == "2") {
  print("입력하신 숫자는 2입니다.")
} else if (user_input == "3") {
  print("입력하신 숫자는 3입니다.")
} else {
  print("잘못된 입력입니다.")
}

하지만 switch 문을 사용하면 훨씬 간결하게 표현할 수 있어요! 마치 마법 같죠? ^^

user_input <- readline(prompt = "숫자를 입력하세요: ")

result <- switch(user_input,
                 "1" = "입력하신 숫자는 1입니다.",
                 "2" = "입력하신 숫자는 2입니다.",
                 "3" = "입력하신 숫자는 3입니다.",
                 "잘못된 입력입니다." # default 값
)

print(result)

switch 문의 장점과 활용

훨씬 깔끔하고 이해하기 쉽죠? switch 문을 사용하면 코드의 길이가 줄어들 뿐만 아니라, 코드의 구조도 명확해져서 가독성이 크게 향상된답니다! 특히 조건이 많아질수록 switch 문의 효율성은 더욱 빛을 발하게 돼요. 마치 정리 정돈을 잘하는 사람처럼 코드가 깔끔하게 정돈되는 느낌이랄까요? ^^
switch 문은 숫자뿐만 아니라 문자열, 논리값 등 다양한 데이터 타입에도 적용할 수 있어요. 또한, 각 case에 여러 개의 값을 할당하여 동일한 코드 블록을 실행하도록 할 수도 있답니다. switch 문을 잘 활용하면 복잡한 조건문을 효율적으로 처리하고, 코드의 가독성을 높여 유지보수도 편리하게 만들 수 있어요! R 프로그래밍 실력 향상을 위해 switch 문을 꼭 마스터해 보세요! 화이팅! ^^

 

R로 데이터 분석하는 여정, 오늘은 제어문과 함께 좀 더 깊이 들어가 봤어요! if 문의 기본 구조부터 else, 다중 조건, 그리고 switch 문까지, 코드 흐름을 제어하는 다양한 방법들을 살펴보았죠. 어때요, 이제 좀 더 복잡한 로직도 훨씬 깔끔하게 표현할 수 있을 것 같지 않나요? 처음엔 조금 헷갈릴 수도 있지만, 연습하다 보면 금방 손에 익을 거예요.

작은 코드 조각들이 모여 큰 프로그램을 만드는 것처럼, 이 작은 제어문들이 여러분의 데이터 분석 능력을 한 단계 더 업그레이드해줄 거라고 믿어요. 다음 포스팅도 기대해 주세요! 더 재미있고 유익한 내용으로 찾아올게요!

 

Itlearner

Share
Published by
Itlearner

Recent Posts

R에서 함수(Function) 정의 및 호출 (function() { })

안녕하세요, 여러분! 오늘은 R과 친해지기 위한 아주 중요한 걸음을 함께 내딛어 보려고 해요. 바로 함수(function)…

20분 ago

R에서 반복문 (for, while, repeat 활용법)

R 언어로 데이터 분석을 하다 보면, 반복 작업이 정말 많죠? 그럴 때마다 일일이 코드를 반복해서…

4시간 ago

R에서 산술 연산자 및 논리 연산자 (+, -, *, ==, !=, &, |)

안녕하세요, 여러분! 😊 오늘은 R과 함께 신나는 데이터 분석 여행을 떠나볼까요? 데이터 분석에서 가장 기본적이면서도…

13시간 ago

R에서 요인(Factor) 데이터 타입 활용법 (factor(), levels())

안녕하세요! 데이터 분석하면 왠지 어렵고 복잡하게 느껴지시죠? 그런데 막상 배우다 보면 생각보다 재미있는 부분도 많답니다.…

19시간 ago

R에서 데이터 프레임(Data Frame) 만들기와 변형 (data.frame(), dplyr)

안녕하세요! 데이터 분석에 관심 있는 분들, R을 배우고 싶은 분들 모두 환영해요! R에서 데이터를 다루는…

1일 ago

R에서 행렬(Matrix)과 배열(Array) 다루기

안녕하세요! 데이터 분석의 세계에 뛰어들고 싶은데, 뭔가 막막한 기분 느껴본 적 있으세요? R 언어를 배우다…

1일 ago