獨斷論

통계 R 사용설명서 16 - for, while, if else 등의 순환문과 조건문 본문

과학과 기술/R 통계

통계 R 사용설명서 16 - for, while, if else 등의 순환문과 조건문

부르칸 2016. 5. 24. 05:20

GNU R은 C나 FORTRAN같은 저급언어(나쁘다는 뜻의 저급이 아님 ㅋㅋ)와는 다르게 for, while, if else 등의 순환문이나 조건문 같은걸 많이 필요로 하지 않는다. 하지만 알아두면 언젠간 쓸일이 있으므로 잠시라도 훑어보는게 좋다.


아 그리고

아래 예제같이 여러가지 문장을 한꺼번에 생각해서 처리해야하는 스크립트는 R console에 입력하여 연습하는 것보다는 R Editor에 입력하여 연습하는 것이 좋다. 물론 실전에서는 무조건 R Editor를 이용하는게 낫다.



순환문


흔히, 루프(loop)니 반복계산이라고도 한다.


for 문

for( )문은 괄호 안에 변수를 몇번 반복할지 명시해준다.

예를들면 아래와 같다(이 문장을 R Editor에서 입력하고 전체를 실행시키는 것이 편하다. Console에 입력해도 되지만 좀 헷갈린다.).


1

2

3

4

 for(i in 1:10) {
   cat("hello", i, "\n")
   cat("hi", i, "\n\n")
 }


첫째줄에 i라는 변수를 1에서 10까지 하나씩 증가시키면서 중괄호 즉 { }안의 문장을 실행하라 하였다. 먄약 for문에 걸린 문장이 한 개라면 중괄호는 생략해도 좋다.

cat()은 화면에 여러가지 문장이나 변수를 출력하는 명령어인데

두째줄에서 hello를 출력하고 변수 i를 출력하고 다음줄로 바꾸라고 되어 있다. 다음줄로 바꾸라는 건 \n이다.


결과는 다음과 같다.


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

 hello 1
 hi 1

 hello 2
 hi 2

 hello 3
 hi 3

 hello 4
 hi 4

 hello 5
 hi 5

 hello 6
 hi 6

 hello 7
 hi 7

 hello 8
 hi 8

 hello 9
 hi 9

 hello 10
 hi 10



while 문

while( )문은 괄호안의 조건이 참일동안만 실행하는데 괄호안의 조건을 바꿔주는 문장이 꼭 while문 뒤에 포함되어야만 한다. 안그러면 무한적으로 while문을 실행하게 된다.

1

2

3

4

5

 i <- 0
 while(i < 5) {
    cat("Hello", i, "\n")
    i <- i + 1
 }


첫째줄에서 i라는 변수에 0을 집어넣었다.

2째줄에서 while문을 실행하는데 그 조건이 i가 5보다 작을동안만 실행하라고 하였다.

4째줄에 i에 1을 더하라고 하였다.

따라서 while문은 i가 0에서 4까지 증가할때까지만 실행될 것이다.


아래 위 while문의 결과가 나와있다.


1

2

3

4

5

 Hello 0
 Hello 1
 Hello 2
 Hello 3
 Hello 4


중요한건

R은 주로 행렬과 벡터를 가지고 연산하게 만들어져있기때문에 위와같은 순환문이 별로 쓰이지를 않는다는 점이다.

만약에 변수 mydat라는 벡터에 -9999라는 숫자가 있으면 모두 NA로 바꾸라는 명령을 하고싶다고 하자.


이때 for()문을 사용하는건 어리석은짓이다.


1

2

3

4

5

6

7

 mydat <- c(1, 2, 3, -9999, 5)

 for(i in 1:length(mydat)) {
    if(mydat[i] == -9999) {
       mydat[i] <- NA
    }  
 }


위와같이 for문을 이용하여 -9999를 NA로 바꿀수 있지만 mydat의 크기가 클 경우 실행속도가 매우 느려진다.

그냥 아래와 같이 한다.


1

2

 mydat <- c(1, 2, 3, -9999, 5)
 mydat[mydat == -9999] <- NA



조건문


조건에 참이냐 거짓이냐에 따라 실행되고 안되고가 결정되는 문장을 말한다.


if-else 문

if의 조건이 만족할때 실행하는 문장은 if뒤에 들어가고 if조건이 만족하지 못할때 문장은 else 뒤에 들어가게 된다.

예를 들어 a에 있는 값이 5보다 크면 large라고 출력하고 5보다 작으면 small이라고 출력하는 스크립트를 만들려고 한다면


1

2

3

4

5

6

 a <- 5

 if(a < 5)
    print("small")
 else
    print("large")


5보다 작을때 small만 출력하고자한다면 위 스크립트에서 5와 6번재 줄을 삭제해도 좋다.


ifelse 문

ifelse문은 if와 else에 해당되는 것은 한 줄에 다 표현할수 있도록 만든 것이다.

문법은 다음과 같다.


ifelse(조건문, 참일때 실행하는 문장, 거짓일때 실행하는 문장)


벡터 ar라는 변수에 -1에서 1가지의 20개의 난수를 발생시키고 ar의 값이 0보다 크거나 같으면 1을 입력하고 0보다 작으면 -1을 입력하는 스크립트를 만들고자한다면


1

2

3

4

5

 ar <- runif(20, min=-1, max=1)

 z <- ifelse(ar >= 0, 1, -1)
 ar
 z


와 같이 하면 된다.

Comments