728x90

R은 통계프로그래밍 언어로 일반인이 사용하기 쉽게 만든 언어이다.

그러나 필자는 프로그래머이고 비 프로그래머의 인식으로 접근하기 힘든면이 있다.

강의 또한 그러하다. 강의 곳곳에 프로그래머적인 시선이 들어있으니 참고하여 필요없으면 넘겨라.


참고:

[개발환경 셋팅하기]R설치 및 환경변수 등록-(1)

[개발환경 셋팅하기]RStudio설치-(2)

[개발환경 셋팅하기]RStudio프로젝트 만들기-(3)


특정 작업을 반복해서 하려고할때 일일히 다적을 수 있을까?

물론 시간이 많다면 다 적을수는 있을것이다.

그런데 사용자의 입력을 받아서 출력하는 방식으로 사용을 한다면 위의 방식역시 해답이 되지는 못한다.

그러면 어떠한 방식으로 사용해야 적당할까? 바로 반복문이다.

반복문을 사용하면 반복되는 작업들을 효율적이게 처리할 수 있다.

R에서는 for,while,repeat이라는 3개의 반복문이 존재한다.

사실 셋은 서로 완벽하게 호환이 되지만 느낌의 차이가 존재한다.

아마도 느낌의 차이때문에 세개가 존재하는것 같다. 어려운건 아니니 하나하나 알아가면서 보도록하자.


while


while문은 반복문의 정석이라고 할 수 있다.

매번 조건을 확인하여서 조건이 허락하는한 반복을 재개하는 방식이다.

이 방식은 매우 유용하며 앞으로도 자주 활용되는 방식이다.


sum <- 0

i <- 1

while(sum<100){

  sum <- sum +i

  i <- i + 1

}

print(i)


위의 코드는 sum에 계속해서 i를 더한다. i는 매번 1씩증가한다. sum이 100을 넘을 경우 그 때의 i값을 확인하는 코드이다.

실행을 하면 15에서 순환을 멈추게 된다. 이런식으로 반복을 손쉬운 코딩으로 해결할 수 있다.

만약 도중에 특정한 사례에서 반복을 멈추고 싶다면 break구문을 사용하면된다.


sum <- 0

i <- 1

while(sum<100){

  sum <- sum +i

  i <- i + 1

  if(i==10) break

}

print(i)


i를 10일 경우 break를 하게되면 10에 도달시 더이상 반복을 재개하지 않고 그냥 반복 구문을 빠져나오게 된다.

만약 나는 i가 짝수일때만 모두 더하고 싶다면 어떻게 할까? 그럴때는 next구문을 사용한다.

next구문에 도달하면 그 반복은 더이상 뒷내용을 실행치 않고 다음 반복으로 넘어간다.


sum <- 0

i <- 0

while(sum<100){

  i <- i + 1

  if(i%%2==0) next

  sum <- sum +i

}

print(i)


위의 코드를 실행하면 i가 2일때는 next를 시켜서 sum을 더하지 않게되므로 i는 19까지 증가하는 것을 볼 수 있다.


for


for문은 while문과 비슷하지만 사용방식이 다르다.

아래 for의 예시를 보자.


sum <- 0

for(i in 1:10){

  sum <- sum + i

}

print(sum)


위 코드는 for문을 사용하는 전형적인 예시이다.

i의 상황을 지속적으로 체크하여 i가 10인 캐이스까지만 반복을 실행하고 더이상 반복을 실행하지 않는다.

for문 역시 내부에서 break와 next를 사용하는 것이 가능하다.


repeat


보통 repeat의 경우 다른 언어에는 없는 경우가 많은데

repeat의 경우 무한반복하게 된다. 즉 조건이 없다.

무한히 반복할때 쓰게 되며 반복을 멈추고 싶다면 for과 while과 마찬가지로 break로 빠져나와야한다.


sum<-0

i<-0

repeat{

  i<-i+1

  if(i==1000) break

  if(i%%2==0) next

  sum<-sum+i

}

print(sum)


위 코드는 i가 1000까지 무한반복을 하다가 1000이 되는 순간 break로 빠져나가게 된다.

만약 break가 없다면 해당코드는 무한반복을 하게 되는 것이다.

'Programming > R' 카테고리의 다른 글

[R-11]함수와 전역변수  (0) 2017.11.18
[R-10]함수(function)  (0) 2017.11.18
[R-08]분기문(조건문)  (0) 2017.11.18
[R-07]배열(Array)  (0) 2017.11.18
[R-06]리스트(list)  (0) 2017.11.18

+ Recent posts