(Ch 6) 반복문

2024. 8. 25. 20:43확률 통계/R 데이터 분석

for 문

기본 for문

for(반복 변수 in 반복 범위){ 
  반복할 명령들
}
for(i in 1:5){
  print("*")
}
> for(i in 1:5){
+   print("*")
+ }
[1] "*"
[1] "*"
[1] "*"
[1] "*"
[1] "*"
  • 위의 예시에서 i는 사용하지 않지만 i 에는 1,2,3,4,5가 차례대로 반복되면서 저장된다.
  • for() 문은 { } 사이에 반복할 명령들을 넣는다.

반복 범위에 따른 반복 변수의 값 변화

for(i in 1:5){
  print(i)
}
> for(i in 1:5){
+   print(i)
+ }
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
  • 위에서 말한 것 처럼 i에는 순서대로 1,2,3,4,5가 저장된다.

반복 변수를 이용한 구구단 출력

for(i in 1:9){
  cat('2 *', i,'=',2*i,'\n')
}
> for(i in 1:9){
+   cat('2 *', i,'=',2*i,'\n')
+ }
2 * 1 = 2 
2 * 2 = 4 
2 * 3 = 6 
2 * 4 = 8 
2 * 5 = 10 
2 * 6 = 12 
2 * 7 = 14 
2 * 8 = 16 
2 * 9 = 18
  • cat함수는 여러개의 값을 출력해 주는 함수이다.
  • 1~9까지의 숫자를 반복하여서 구구단을 출력해 준다.

for문 안에서 if문의 사용

for(i in 1:10){
  if(i%%2==1){
    print(i)
  }
}
> for(i in 1:10){
+   if(i%%2==1){
+     print(i)
+   }
+ }
[1] 1
[1] 3
[1] 5
[1] 7
[1] 9
  • %%는 나머지를 보여주기 때문에 나머지가 1인 수, 즉 홀수인 경우에만 if문을 사용하여서 출력하도록 하였다.

1~100까지의 합 출력

sum<-0
for(i in 1:100){
  sum<-sum+i
}
sum
> sum<-0

> for(i in 1:100){
+   sum<-sum+i
+ }

> sum
[1] 5050
  • 처음에 sum=0으로 만들어주고 sum+i를 sum으로 누적해 주면서 1~100까지의 합을 모두 구해준다.

iris 꽃잎의 길이에 따른 분류 작업하기

  • 꽃잎의 길이가 1.6 이하이면 L, 1.7~3.1이면 ML, 3.2 이상 5.0 이하 이면 MH, 5.1 이상이면 H으로 분류하는 작업을 해보자
x<-nrow(iris)
y<-c() #벡터 생성
for(i in 1:x){
  if(iris$Petal.Length[i]<=1.6){
    y[i]<-'L'
  }else if(iris$Petal.Length[i]){
    y[i]<-'ML'
  }else if(iris$Petal.Length[i]){
    y[i]<-'MH'
  }else {
    y[i]<-'H'
  }
}
print(y)
df<-data.frame(iris$Petal.Length,y) #꽃잎의 길이 데이터셋과 만든 y벡터를 합한다.
head(df)
> print(y)
  [1] "L"  "L"  "L"  "L"  "L"  "ML" "L"  "L"  "L"  "L"  "L"  "L" 
 [13] "L"  "L"  "L"  "L"  "L"  "L"  "ML" "L"  "ML" "L"  "L"  "ML"
......

> df<-data.frame(iris$Petal.Length,y)

> head(df)
  iris.Petal.Length  y
1               1.4  L
2               1.4  L
3               1.3  L
4               1.5  L
5               1.4  L
6               1.7 ML

while문

기본 while문

while(조건){
  반복할 명령문들
}
sum<-0
i<-0
while(i<=100){
  sum<-sum+i
  i<-i+1
}
print(sum)
> while(i<=100){
+   sum<-sum+i
+   i<-i+1
+ }

> print(sum)
[1] 5050
  • i <=100일 동안만 sum+i 연산을 반복하여서 1~100까지의 숫자의 합을 구해준다.

break와 next

sum<-0
i<-0
while(i<=10){
  sum<-sum+i
  i<-i+1
  if(i>=5) break
}
print(sum)
> print(sum)
[1] 10
  • break: 반복문을 종료시키는 역할
  • 위의 경우에는 i>=5의 경우에 반복문을 종료시켰기 때문에 1~4까지의 합이 sum에 저장되었다.
sum<-0
for(i in 1:10){
  if(i%%2==0) next
  sum<-sum+i
}
sum
> for(i in 1:10){
+   if(i%%2==0) next
+   sum<-sum+i
+ }

> sum
[1] 25
  • next: next의 이후 구문을 실행하지 않고 넘어간다.
  • 위의 경우 i%%2==0인 경우, 즉 짝수인 경우는 넘어가고 홀수인 경우에만 sum에 저장한다.