해보記/R

<記> R 데이터 반복문 - for, while, repeat, apply, aggregate

Light Pillar 2019. 12. 18. 15:43

R에서의 반복문은 for, while 이외에도 repeat, apply, aggregate 등이 있다. 

이 중 apply, aggregate 등은, 사용하기는 쉽지만 수행속도가 느린 for 를 보완하기 위한 반복문이다.


for

# for(변수 in 반복횟수) 실행문 : 실행문을 반복 횟수만큼 실행
# 변수 i가 1에서 5까지의 값을 갖을 때까지 print(rep(i, i))라는 실행문을 실행한다.
# i = 1 이면 print(rep(1, 1))을 실행하고, i = 2 이면 print(rep(2, 2))를 실행한다. i = 5 까지 반복 수행한다.
> for(i in 1:5)
+ print(rep(i, i))

# 1부터 10까지 합 구하기
> sum.x <- 0
> for(i in 1:10)
+ sum.x <- sum.x + i
> sum.x

# 중첩 반복문 : 반복문 안에 반복문이 있는 구문
# 구구단 만들기
> gugu <- matrix(0, ncol = 9, nrow = 9)
> for(i in 1:9) {
+   for(j in 1:9) {
+     gugu[i, j] <- i * j
+   }
+ }
> gugu

 

while

# while(조건) 실행문 : 조건이 참일 때까지 실행문을 수행
# a의 값이 5이하 까지 반복적으로 진행
> a <- 1
> while(a <= 5) {
+   print(rep(a, a))
+   a <- a + 1
+ }

# 1부터 10까지 합 구하기
> a <- 1
> sum.a <- 0
> while(a <= 10) {
+   sum.a <- sum.a + a
+   a <- a + 1
+ }
> sum.a

 

repeat

repeat문은 실행문을 계속 수행하다 실행문에서 break문을 만나서 반복수행을 멈춘다. break 조건을 잘못 설정하면 박복문이 무한루프에 빠질 수 있으니 주의해야 한다.

# repeat 실행문 : break를 만날때까지 반복 수행
> a <- 1
> repeat {
+   if(a > 5) break   # a의 값이 5보다 큰 경우 break 실행
+   print(rep(a, a))
+   a <- a + 1
+ }

# 1부터 10까지 합 구하기
> a <- 1
> sum.a <- 0
> repeat {
+   if(a > 10) break      # a의 값이 10보다 큰 경우 break 실행
+   sum.a <- sum.a + a
+   a <- a + 1
+ }
>sum.a

 

apply

apply 함수는 apply, sapply, lapply 등 다양한 함수가 존재하는데 원하는 결과에 맞춰 사용하면 된다.  for문 보다 속도가 빠르고, 많이 사용하는 함수이다.

# apply
> height <- c(140, 155, 142, 175)
> size.1 <- matrix(c(130, 26, 110, 24, 118, 25, 112, 25),
+ ncol = 2, byrow = T, dimnames = list(c("Abe", "Bob", "Carol", "Deb"), c("Weight", "Waist")))
> size <- cbind(size.1, height)       # size.1 행렬과 height 벡터의 열 기준 결합
> colmean <- apply(size, 2, mean)       # 2 : 열의 평균값을 계산
> rowmean <- apply(size, 1, mean)      # 1 : 행의 평균값을 계산
> colvar <- apply(size, 2, var)              # 2 : 열의 분산값을 계산
> rowvar <- apply(size, 1, var)             # 1 : 행의 분산값을 계산

# sapply
# 결과값이 테이블 형태로 나타난다.
> x <- list(a = 1:10, beta = exp(-3:3), logic = c(TRUE, FALSE, FALSE, TRUE))
> sapply(x, quantile)

# lapply
# 결과값이 리스트 형태로 나타난다.
> lapply(x, quantile)

 

aggregate

apply 함수와 동일한 결과를 내보내며, 속도면에서 빠르다는 장점이 있다.

간단한 통계량을 계산할때 많이 사용된다.

# aggregate(x, by, FUN, ..., simplify = TRUE)
> head(iris)
> aggregate(iris$Sepal.Length, by = list(iris$Species), summary)

# 조건에 y = list(iris$Species)로 할 경우 걸럼 명이 Group.1으로 강제 할당 된다.
# 컬럼명을 정의하고 싶으면 다음과 같이 작성한다.
> aggregate(iris$Sepal.Length, by = list(Species = iris$Species), summary)

'해보記 > R' 카테고리의 다른 글

<記> R 스타일 가이드  (0) 2019.12.30
<記> R 위치 측도와 산포 측도  (0) 2019.12.23
<記> R 데이터 조건문 - if/ifelse, switch  (0) 2019.12.18
<記> R 함수 - 기타  (1) 2019.12.17
<記> R 함수 - 문자형  (0) 2019.12.17