본문 바로가기

R Programming

[R Programming] 간단한 함수생성 및 루프(for, while) - Week 2-4

GIST에서 공개하는 청년 AI. Big Data 아카데미 온라인 기초과정 빅데이터 분석과 R프로그래밍 강의를 참고하였다.

 

R Studio를 실행하여 실습을 해본다.

 

함수 생성

함수를 생성하고 사 옹해본다.

1
2
3
4
5
square<-function(x){
   return(x*x)
}
square(9)
square(1:3)
cs

함수를 생성하기 위해서는 " 함수 이름 <-function(입력 변수){ return 출력 값 } "으로 생성한다.

square 함수는 정사각형의 넓이를 구하는 함수로 변의 길이를 입력하면 넓이가 출력된다(제곱)

square(9)를 입력하면 변의 길이가 9인 정사각형의 넓이 이므로 9x9가 되어 81이 출력된다.

square(1:3)은 1부터 3까지 정사각형의 넓이 이므로 1,2,3의 제곱이 차례로 출력된다.

1
2
3
4
dif<-function(x,y){
  return(x-y)
}
dif(20,10)
cs

dif 함수는 두 변수의 차이 값을 출력하는 함수이다. 그러므로 입력 변수가 x, y 2개가 되고 출력은 x에서 y를 뺀 값이 출력될 것이다.

dif(20,10)은 20에서 10을 뺀 값이므로 10이 출력된다.

1
2
3
4
rootdif<-function(x,y){
  return(sqrt(x-y))
}
rootdif(20,10)
cs

rootdif 함수는 두 변수의 차이의 제곱근을 구하는 함수이다. 두 변수 x, y가 입력되면 출력은 x에서 y를 뺀 값에 sqrt함수를 사용한다. sqrt함수는 제곱근을 계산해주는 함수이다.

rootdif(20,10)은 20에서 10을 빼서 10이 나오고 이 10의 제곱근을 구하므로 3.162278이 나온다.

 

기존 함수의 코드

1
2
3
4
5
round
round(5.14846)
round(5.14846, 2)
round(rootdif(20,10))
round(rootdif(20,10),2)
cs

round 함수는 소수점 자리를 조정해주는 함수로 소수점이 있는 숫자를 입력하고 몇 번째 자리까지 표현할 것인지를 입력하면 그에 맞추어 뒤의 소수점을 반올림하여 숫자를 출력해준다. 뒤에 옵션을 붙이지 않으면 default로 소수점 첫 번째 자리에서 반올림 한 값이 출력된다.

round(5.14846): 옵션이 없으므로 5가 출력된다.

round(5.14846, 2): 옵션이 2이므로 소수점 3번째 자리에서 반올림하여 출력된다. 5.15

round(rootdif(20,10)): 위에서 생성한 rootdif함수를 사용하였다. rootdif(20,10)은 두 수의 차이의 제곱근이므로 아까 출력하였던 3.162278이 나오고 이를 소수점을 없앴으니 3이 출력된다.

round(rootdif(20,10), 2): 같은 숫자에 2번째 자리까지 출력을 하니 3번째 자리에서 반올림하여 3.16이 출력된다.

 

for를 사용한 루프

for를 사용하면 정한 횟수만큼 반복할 수 있다.

1
2
3
4
5
6
7
sum=0
for (i in 1:10) {
  if (i %% 2 == 0){
    sum=sum+i
  }
}
print(sum)
cs

먼저 sum변수를 0으로 두었다. 이제 다음 줄의 반복문을 설명하면

for(i in 1:10): 10번 반복을 한다.

반복문 내부를 보면

if( i %% 2 == 0): "변수 i를 2로 나누었을 때 나머지가 0이다." 이는 짝수를 판별하기 위함이다. 위 조건을 만족하면 아래 코드를 실행시킨다.

sum = sum + i: sum함수에 현재 i 변수를 더한다.

이렇게 보면 1부터 10까지 존재하는 짝수들의 합을 구하는 코드임을 알 수 있다.

반복문이 종료되면 print(sum)으로 변수 sum을 출력한다.

 

두 번째 예제를 본다.

1
2
3
4
5
6
7
8
for (i in 1:10) {
  i<-i+1
  print(i)
  if (i>5){
    # stop loop after i>5
    break
  }
}
cs

for( i in 1:10) { // 10번 반복을 한다.

i <-i+1 //i변수에 1을 더한다.

print(i) //i를 출력한다.

if( i>5) { //i가 5 이상이라면

break //반복문을 종료한다.

}

i가 1부터 하나씩 더해져 가는 상황에서 i가 5 이상이 되는 순간 반복문이 종료된다.

반복문에서 10번 반복을 실행하는 코드라도 break를 만나면 반복문이 종료된다.

while을 사용한 루프

1
2
y=0
while(y<5) { print( y<-y+1) }
cs

while을 사용해서 반복문을 만들 수 있다. y=0로 변수 y를 0으로 생성하였다.

while(y <5): 변수 y가 5 이하가 될 때까지 반복한다.

print(y <-y+1): y에 1을 더하여 출력한다.