Categories: R

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

R 언어로 데이터 분석을 하다 보면, 반복 작업이 정말 많죠? 그럴 때마다 일일이 코드를 반복해서 쓰는 건 너무 귀찮고 비효율적이잖아요. 그래서 오늘은 제가 R에서 반복문을 효과적으로 사용하는 방법을 알려드리려고 해요! for, while, repeat 루프! 이름만 들어도 벌써 머리가 아프다고요? 걱정 마세요! 제가 차근차근 설명해 드릴 테니까요. 복잡한 코드는 이제 그만! 반복문을 활용하면 훨씬 간결하고 깔끔하게 데이터를 처리할 수 있답니다. R과 친해지는 지름길, 지금 바로 시작해 볼까요?

 

 

for 루프 기본 사용법

R에서 반복 작업을 처리할 때 가장 먼저 떠오르는 건 뭘까요? 바로 for 루프! 마치 든든한 일꾼처럼, 정해진 횟수만큼 코드를 반복 실행해주는 고마운 친구예요. 자, 그럼 이 친구를 어떻게 다루는지, 기본적인 사용법부터 차근차근 알아볼까요? ^^

for 루프 기본 구조

for 루프의 기본 구조는 생각보다 간단해요. 마치 레고 블록처럼, 정해진 틀에 필요한 값만 쏙쏙 넣어주면 된답니다. for (변수 in 시퀀스) { 실행할 코드 } 이게 바로 for 루프의 핵심 문법이에요! 참 쉽죠?

여기서 ‘변수’는 반복 과정에서 시퀀스의 각 요소를 하나씩 담아두는 그릇과 같아요. 마치 택배 기사님이 하나씩 물건을 배달하듯이 말이죠! 그리고 ‘시퀀스’는 1부터 10까지의 숫자, ‘a’부터 ‘z’까지의 문자, 또는 데이터 프레임의 열 이름처럼 순서대로 나열된 값들의 집합을 의미해요. ‘실행할 코드’ 부분에는 반복해서 실행하고 싶은 R 코드를 자유롭게 작성할 수 있답니다.

for 루프 예시

예를 들어, 1부터 5까지의 숫자를 차례대로 출력하는 for 루프를 만들어 볼까요?

for (i in 1:5) {
  print(i)
}

이 코드를 실행하면, i라는 변수에 1부터 5까지의 숫자가 차례대로 저장되면서 print(i)가 실행되어요. 결과적으로 1, 2, 3, 4, 5가 차례대로 콘솔에 출력되는 것을 확인할 수 있겠죠?!

seq() 함수 활용

seq() 함수를 사용하면 더욱 다양한 시퀀스를 만들 수 있어요. 예를 들어 1부터 10까지 2씩 증가하는 시퀀스를 만들고 싶다면 seq(1, 10, by = 2)를 사용하면 된답니다. 이렇게 만들어진 시퀀스를 for 루프에 적용하면 1, 3, 5, 7, 9가 출력되겠죠? 정말 신기하지 않나요?!

벡터, 리스트, 행렬에 대한 적용

for 루프는 벡터뿐만 아니라 리스트, 행렬에도 적용할 수 있어요. 리스트의 경우, 각 요소가 서로 다른 데이터 타입일 수 있다는 점을 기억해야 해요. 행렬의 경우에는 nrow()ncol() 함수를 이용해 행과 열의 개수를 얻어와 루프를 제어할 수 있어요. 이차원 배열을 다루는 것처럼 말이죠!

matrix_data <- matrix(1:9, nrow = 3)

for (i in 1:nrow(matrix_data)) {
  for (j in 1:ncol(matrix_data)) {
    print(paste("(", i, ",", j, "):", matrix_data[i, j]))
  }
}

이 코드는 3×3 행렬의 각 요소의 위치와 값을 출력하는 예시예요. paste() 함수를 사용해서 문자열을 조합하는 센스까지! for 루프 안에 또 다른 for 루프를 넣어서, 이중 루프를 만들 수도 있어요. 마치 2차원 좌표 평면을 탐험하는 것 같지 않나요?

데이터 분석에서의 활용

for 루프는 데이터 분석에서 정말 다양하게 활용될 수 있어요. 특정 조건을 만족하는 데이터만 추출하거나, 데이터를 가공하고 변환하는 작업에도 유용하게 쓰인답니다. 데이터 분석의 필수 도구라고 할 수 있죠! R의 강력한 기능들을 for 루프와 함께 사용하면 데이터 분석의 효율을 훨씬 높일 수 있을 거예요. 다음에는 while 루프에 대해 알아보도록 할게요! 기대해주세요~?

 

while 루프 조건 설정 및 활용

for 루프가 정해진 횟수만큼 반복한다면, while 루프는 조건이 참인 동안 계속해서 반복 작업을 수행해요. 마치 뫼비우스의 띠처럼, 조건이 거짓이 될 때까지 끊임없이 돌아가는 거죠! 이러한 특성 덕분에 while 루프는 반복 횟수를 미리 알 수 없거나, 특정 조건이 만족될 때까지 작업을 계속해야 하는 상황에 아주 유용해요. 🤔 어떤 상황에서 활용하면 좋을지, 조건은 어떻게 설정하는지 자세히 알아볼까요?

while 루프의 기본 구조

while 루프의 기본 구조는 놀랍도록 간단해요. while (조건) { 실행할 코드 } 이 형태만 기억하면 돼요! 조건 부분에는 참(TRUE) 또는 거짓(FALSE)으로 평가될 수 있는 표현식이 들어가고, 조건이 참인 동안 중괄호 안의 코드 블록이 반복 실행되는 거예요. 마치 시계의 초침처럼, 조건이 참인 동안 끊임없이 움직이는 거죠. 🕰️

while 루프 활용 예시: 숫자 제곱 출력

예를 들어, 사용자로부터 숫자를 입력받아 그 숫자가 10보다 작은 동안 계속해서 제곱을 출력하는 프로그램을 만들어 볼게요. R 코드로는 다음과 같이 표현할 수 있어요.

num <- as.numeric(readline("10보다 작은 숫자를 입력하세요: "))

while (num < 10) {
  print(paste(num, "의 제곱은", num^2, "입니다."))
  num <- num + 1  # 중요! num 값을 증가시켜 루프가 종료되도록 해야 해요!
}

여기서 num < 10이 바로 조건 부분이에요. 만약 사용자가 5를 입력한다면, while 루프는 5, 6, 7, 8, 9일 때 각각의 제곱을 출력하고, num이 10이 되는 순간 조건이 거짓이 되어 루프가 종료돼요. 만약 num 값을 증가시키는 부분 (num <- num + 1)을 넣지 않았다면?! 😱 무한 루프에 빠지게 돼요! 프로그램은 5의 제곱만 계속해서 출력하며 멈추지 않을 거예요. 마치 쳇바퀴처럼 똑같은 작업만 반복하게 되는 거죠. 😅

while 루프 활용 예시: 데이터 프레임에서 특정 조건 만족하는 행 찾기

while 루프는 조건 설정에 따라 다양한 형태로 활용할 수 있어요. 예를 들어, 데이터 프레임에서 특정 조건을 만족하는 행을 찾을 때도 while 루프를 사용할 수 있어요. 1부터 100까지의 숫자를 가진 데이터 프레임에서 7의 배수를 찾는다고 가정해 볼게요.

df <- data.frame(num = 1:100)
i <- 1
multiples_of_7 <- c()

while (i <= nrow(df)) {
  if (df$num[i] %% 7 == 0) {
    multiples_of_7 <- c(multiples_of_7, df$num[i])
  }
  i <- i + 1
}

print(multiples_of_7)

이 코드에서는 i <= nrow(df) 조건을 통해 데이터 프레임의 모든 행을 탐색하고, 7의 배수를 찾아 multiples_of_7 벡터에 저장해요. while 루프는 단순한 반복 작업뿐 아니라, 조건문과 함께 사용하여 복잡한 논리 구현도 가능하게 해줘요! 👍

while 루프 활용 예시: 시뮬레이션

또한, while 루프는 시뮬레이션이나 게임 개발에서도 유용하게 활용될 수 있어요. 예를 들어, 동전 던지기 시뮬레이션에서 앞면이 연속으로 3번 나올 때까지 던지는 횟수를 구하는 프로그램을 생각해 볼게요.

count <- 0
consecutive_heads <- 0

while (consecutive_heads < 3) {
  result <- sample(c("앞면", "뒷면"), 1)
  count <- count + 1
  
  if (result == "앞면") {
    consecutive_heads <- consecutive_heads + 1
  } else {
    consecutive_heads <- 0 # 뒷면이 나오면 연속 횟수 초기화!
  }
}

print(paste("앞면이 3번 연속 나올 때까지", count, "번 던졌습니다."))

이처럼 while 루프는 조건에 따라 유연하게 반복 횟수를 조절할 수 있기 때문에 다양한 상황에서 활용도가 높아요. 조건 설정과 루프 내부의 로직을 잘 구성하면 원하는 결과를 효율적으로 얻을 수 있답니다! 😄 while 루프를 잘 활용해서 R 프로그래밍 실력을 한 단계 더 업그레이드해 보세요! 🚀

 

repeat 루프와 break 문의 조합

R에서 반복문을 다룰 때, forwhile 루프는 각각 정해진 횟수 또는 특정 조건이 만족될 때까지 반복 작업을 수행하는 데 유용하죠. 그런데, 조건을 먼저 검사하지 않고 무조건 한 번은 실행해야 하는 상황이라면 어떨까요? 🤔 바로 이때 repeat 루프가 등장합니다! repeat 루프는 조건 검사 없이 코드 블록을 실행한 후, 특정 조건이 충족될 때 루프를 탈출하는 방식으로 동작해요. 이 탈출의 열쇠를 쥐고 있는 것이 바로 break 문입니다. 자, 이 둘의 환상적인 조합을 한번 자세히 살펴볼까요?

repeat 루프와 break 문의 관계

repeat 루프는 기본적으로 무한 루프와 같아요. break 문이 없다면 루프는 영원히 계속되겠죠? 😨 그렇기 때문에 repeat 루프를 사용할 때는 반드시 break 문을 함께 사용하여 루프를 종료하는 조건을 명시해야 합니다. 마치 게임에서 특정 아이템을 얻어야 다음 레벨로 넘어갈 수 있는 것처럼 말이죠! 🎮

break 문의 역할

break 문은 루프 내부에서 특정 조건이 만족되었을 때 루프를 즉시 종료시키는 역할을 합니다. 예를 들어, 사용자로부터 입력을 받아 특정 값이 입력되면 루프를 종료하는 프로그램을 생각해 보세요. repeat 루프 내부에서 사용자 입력을 받고, 입력값이 특정 값과 일치하면 break 문을 실행하여 루프를 탈출하는 방식으로 구현할 수 있겠죠? 참 쉽죠잉~? 😉

repeat 루프와 break 문의 활용 예시

repeat 루프와 break 문의 조합은 특정 조건이 만족될 때까지 계속해서 작업을 반복해야 하는 상황에서 매우 유용하게 활용될 수 있어요. 예를 들어, 난수를 생성해서 특정 범위에 들어가는 숫자가 나올 때까지 반복하는 프로그램을 작성한다고 가정해 보세요. repeat 루프 내부에서 난수를 생성하고, 생성된 난수가 원하는 범위에 들어가면 break 문을 실행하여 루프를 종료하면 되겠죠? 이처럼 repeat 루프와 break 문의 조합은 다양한 상황에서 유연하게 활용할 수 있는 강력한 도구입니다. 💪

R 코드 예제

자, 이제 실제 코드를 통해 repeat 루프와 break 문의 조합을 더욱 자세히 알아볼까요? 아래 예제는 1부터 100까지의 숫자 중에서 7의 배수를 찾는 프로그램입니다.

i <- 1
repeat {
  if (i %% 7 == 0) {
    print(paste(i, "는 7의 배수입니다!"))
    break  # 7의 배수를 찾으면 루프 종료!
  }
  i <- i + 1
  if (i > 100) {
    print("100까지 7의 배수를 찾지 못했습니다. ㅠㅠ")
    break # 100을 넘어가면 루프 종료!
  }
}

이 코드에서는 repeat 루프를 사용하여 1부터 100까지의 숫자를 반복적으로 검사합니다. i가 7의 배수인 경우, 해당 숫자를 출력하고 break 문을 사용하여 루프를 종료하죠. 만약 100까지 검사했는데도 7의 배수를 찾지 못한 경우, “100까지 7의 배수를 찾지 못했습니다. ㅠㅠ”라는 메시지를 출력하고 break 문을 사용하여 루프를 종료합니다. 이처럼 break 문을 활용하면 원하는 조건에 따라 루프를 유연하게 제어할 수 있어요! 👍

주의사항

repeat 루프와 break 문의 조합은 특정 조건이 만족될 때까지 무한정 반복해야 하는 작업에 매우 유용하지만, 루프가 종료되지 않는 무한 루프에 빠지지 않도록 주의해야 해요! ⚠️ break 문을 사용하는 조건을 신중하게 설정하여 루프가 반드시 종료되도록 해야 합니다. 마치 미로에서 출구를 찾아야 하는 것처럼 말이죠! 🗺️

repeat 루프와 while 루프의 차이점

repeat 루프는 while 루프와 비슷한 기능을 수행하지만, while 루프는 루프 시작 전에 조건을 검사하는 반면, repeat 루프는 루프를 최소한 한 번 실행한 후에 조건을 검사한다는 차이점이 있어요. 이러한 차이점을 이해하고 상황에 맞는 루프를 선택하는 것이 중요합니다. repeat 루프와 break 문의 조합은 R 프로그래밍에서 강력한 도구가 될 수 있으니, 잘 활용해서 여러분의 코드를 더욱 효율적이고 유연하게 만들어보세요! 😄

 

실제 데이터 분석 예시

자, 이제 드디어! 배운 for, while, repeat 루프를 활용해서 실제 데이터를 분석하는 예시를 살펴볼 시간이에요! 두근두근?! 지금까지 열심히 달려왔으니, 실전에서 어떻게 활용되는지 직접 확인해보면 훨씬 이해가 쏙쏙 될 거예요! ^^

샘플 데이터셋 생성

먼저, 샘플 데이터셋을 하나 만들어 볼게요. ‘R’을 사랑하는 우리답게, 당연히 R에서 바로 만들어야죠! 100명의 학생들의 수학, 과학, 영어 점수를 랜덤으로 생성해 보겠습니다. 점수는 0점부터 100점까지 랜덤하게 분포되어 있다고 가정할게요!


set.seed(2023) # 결과 재현을 위한 시드 설정! 잊지 마세요~
n_students <- 100
scores <- data.frame(
  math = sample(0:100, n_students, replace = TRUE),
  science = sample(0:100, n_students, replace = TRUE),
  english = sample(0:100, n_students, replace = TRUE)
)
head(scores) # 데이터 살짝 엿보기!

이렇게 데이터 프레임을 만들었으니, 이제 본격적으로 분석을 시작해 볼까요? 각 학생들의 평균 점수를 계산하고, 평균 점수가 70점 이상인 학생 수를 세어보는 예시를 for 루프, while 루프, repeat 루프 각각으로 구현해 볼게요. 각 루프의 특징을 비교하면서 보면 더욱 재미있을 거예요!

1. for 루프 활용 예시


average_scores <- numeric(n_students) # 평균 점수를 저장할 벡터 생성!
for (i in 1:n_students) { # 각 학생에 대해 반복!
  average_scores[i] <- mean(scores[i, ]) # i번째 학생의 평균 점수 계산!
}

high_score_count <- 0 # 평균 70점 이상인 학생 수 카운트!
for (score in average_scores) { # 각 평균 점수에 대해 반복!
  if (score >= 70) {
    high_score_count <- high_score_count + 1 # 70점 이상이면 카운트 증가!
  }
}

cat("평균 70점 이상인 학생 수 (for 루프):", high_score_count, "\n")

for 루프는 정해진 횟수만큼 반복할 때 정말 편리해요! 인덱스를 활용해서 각 학생의 데이터에 접근하고, 평균 점수를 계산하는 과정이 깔끔하게 처리되었죠?

2. while 루프 활용 예시


i <- 1 # 초기값 설정!
high_score_count <- 0
while (i <= n_students) { # 조건이 참인 동안 반복!
  average_score <- mean(scores[i, ])
  if (average_score >= 70) {
    high_score_count <- high_score_count + 1
  }
  i <- i + 1 # i 값 증가시켜서 반복문 종료 조건 만족하게 하기!
}

cat("평균 70점 이상인 학생 수 (while 루프):", high_score_count, "\n")

while 루프는 조건에 따라 반복 여부가 결정되기 때문에 유연하게 활용할 수 있어요! 특정 조건을 만족할 때까지 반복하고 싶을 때 아주 유용하답니다.

3. repeat 루프와 break 문의 조합 활용 예시


i <- 1
high_score_count <- 0
repeat { # 무한 반복 시작!
  if (i > n_students) {
    break # 조건 만족하면 반복문 탈출!
  }
  average_score <- mean(scores[i, ])
  if (average_score >= 70) {
    high_score_count <- high_score_count + 1
  }
  i <- i + 1
}

cat("평균 70점 이상인 학생 수 (repeat 루프):", high_score_count, "\n")

repeat 루프는 break 문과 함께 사용하면 더욱 강력해져요! 무한 반복을 하다가 특정 조건을 만족하면 break 문으로 반복문을 빠져나올 수 있죠. 상황에 따라 유용하게 활용할 수 있는 조합이에요!

이렇게 세 가지 루프를 활용해서 동일한 결과를 얻을 수 있다는 것을 확인했어요! 각 루프의 특징을 잘 이해하고 상황에 맞게 적절한 루프를 선택하는 것이 중요하겠죠? 이제 여러분도 R에서 반복문을 자유자재로 활용해서 데이터 분석을 할 수 있을 거예요! 화이팅!! 다음에는 더욱 흥미로운 주제로 찾아올게요~! ^^

 

R의 반복문, 어떻게 활용하는지 이제 좀 감이 잡히셨나요? for, while, repeat! 처음엔 헷갈릴 수 있지만, 오늘 함께 살펴본 예시들을 통해 각 루프의 특징을 잘 이해하셨기를 바라요. 각자의 개성이 뚜렷해서 상황에 맞게 적절히 사용하면 데이터 분석 작업이 훨씬 효율적이고 재밌어질 거예요. 마치 요리할 때 다양한 조리도구를 사용하는 것처럼 말이죠! 다음 분석 프로젝트에 R 반복문을 꼭 활용해보고, 혹시 궁금한 점이 생기면 언제든 다시 찾아와 주세요. 함께 R의 세계를 더 깊이 탐험해 보아요! 더 재미있는 R 이야기로 곧 다시 만나요!

 

Itlearner

Share
Published by
Itlearner

Recent Posts

R에서 apply 계열 함수 (apply(), sapply(), lapply(), tapply())

R 언어를 다루다 보면, 반복적인 작업을 효율적으로 처리하고 싶을 때가 많죠? 그럴 때 엄청 유용한…

3시간 ago

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

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

7시간 ago

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

안녕하세요, 여러분! 오늘은 R과 함께 신나는 코딩 여행을 떠나볼까요? R을 이용하면 데이터 분석이 정말 재밌어져요!…

15시간 ago

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

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

20시간 ago

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

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

1일 ago

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

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

1일 ago