function이란,  사용자 정의 함수를 정의하는 함수입니다.

 

함수 정의 형식

변수 <- function([매개변수]){
함수의 실행문
}

예시) 
f1 <- function(){
  cat("매개변수 없는 함수")
}

출력값: 매개변수 없는 함수

 

 

예제 ①

# 매개변수가 있는 함수 예

f2 <- function(x){
          cat("x의 값 = " , x,  "\n")
      }


f2(10) # 실인수
출력값: x의 값 =  10 

f2(c(1:10)) # 벡터 객체 전달 
출력값: x의 값 =  1 2 3 4 5 6 7 8 9 10 

 

 

예제 ②

# 리턴값이 있는 함수 예

f3 <- function(x,y){ 
        add <- x + y 
        return (add)  
       }
       
add <- f3(10,30)

add
출력값 : [1] 40

-  add : 지역 변수로 사용 { }안에서만 유효합니다.

          사용자 정의 함수 안의 add와 밖의 add는 다르므로 서로 다른 메모리 공간을 가지고 있습니다.

 

return : 결과값 반환 (java의 return과 동일)

   수행한 코드의 결과값을 새로운 변수로 저장하려면 return이라는 인자를 반드시 사용해야 합니다.

   만약 return 값을 따로 지정하지 않으면, 마지막으로 저장된 변수값을 자동으로 반환하게 됩니다.

 

 

예제 ③

# 분산과 표준편차를 구하는 함수 정의

z <- c(7,5,12,9,15,6) 

var_sd <- function(x){
  var <- sum((x-mean(x))^2) / (length(x)-1) # 표본분산
  sd <- sqrt(var) # 표준편차 = 분산에 루르틀 씌어준 것 
  cat('표준분산:', var , '\n')
  cat('표본 표준편차:' , sd ,'\n')
}

var_sd(z)

결과값:
표준분산: 14.8 
표본 표준편차: 3.847077 

- mean : 평균값

- length : 데이터 개수

- sqrt : 루트 씌움

 

 

예제 ④

#구구단 출력 함수 

gugudan <- function(i,j){
  for(x in i){
    cat("==", x , "단 ==\n")
    
    for(y in j){
      cat(x,"x",y,"=",x*y , "\n")
    }
      cat("\n")
  }
}

i <- c(2:9) # 단 수 지정
j <- c(1:9) # 단 수와 곱해지는 수 지정 

gugudan(i,j)

출력값 : 
== 2 단 ==
2 x 1 = 2 
2 x 2 = 4 
2 x 3 = 6 
2 x 4 = 8 
2 x 5 = 10 
2 x 6 = 12 
2 x 7 = 14 
2 x 8 = 16 
2 x 9 = 18 

== 3 단 ==
3 x 1 = 3 
3 x 2 = 6 
3 x 3 = 9 
3 x 4 = 12 
3 x 5 = 15 
3 x 6 = 18 
3 x 7 = 21 
3 x 8 = 24 
3 x 9 = 27 

== 4 단 ==
4 x 1 = 4 
4 x 2 = 8 
4 x 3 = 12 
4 x 4 = 16 
4 x 5 = 20 
4 x 6 = 24 
4 x 7 = 28 
4 x 8 = 32 
4 x 9 = 36 

== 5 단 ==
5 x 1 = 5 
5 x 2 = 10 
5 x 3 = 15 
5 x 4 = 20 
5 x 5 = 25 
5 x 6 = 30 
5 x 7 = 35 
5 x 8 = 40 
5 x 9 = 45 

== 6 단 ==
6 x 1 = 6 
6 x 2 = 12 
6 x 3 = 18 
6 x 4 = 24 
6 x 5 = 30 
6 x 6 = 36 
6 x 7 = 42 
6 x 8 = 48 
6 x 9 = 54 

== 7 단 ==
7 x 1 = 7 
7 x 2 = 14 
7 x 3 = 21 
7 x 4 = 28 
7 x 5 = 35 
7 x 6 = 42 
7 x 7 = 49 
7 x 8 = 56 
7 x 9 = 63 

== 8 단 ==
8 x 1 = 8 
8 x 2 = 16 
8 x 3 = 24 
8 x 4 = 32 
8 x 5 = 40 
8 x 6 = 48 
8 x 7 = 56 
8 x 8 = 64 
8 x 9 = 72 

== 9 단 ==
9 x 1 = 9 
9 x 2 = 18 
9 x 3 = 27 
9 x 4 = 36 
9 x 5 = 45 
9 x 6 = 54 
9 x 7 = 63 
9 x 8 = 72 
9 x 9 = 81 

 

 

결측치(NA=유효하지 않은값) 데이터 처리

data <- c(10,20,5,4,40,7,NA,6,3,NA,2,NA)
data
출력값 : [1] 10 20  5  4 40  7 NA  6  3 NA  2 NA

mean(data)
출력값 : [1] NA

mean(data, na.rm = T) # na.rm : NA의 값을 지우고 계산. 
출력값: [1] 10.77778

- NA : 결과 값이 1개라도 NA가 존재한다면 NA로 출력합니다. (NA = 유효하지 않은 값)


- 평균뿐 아니라 수식으로 계산되어지는 결과값은 NA가 출력합니다.

 

- 통계학및 연산과 관련된 수식 대부분의 함수는 매개변수로 na.rm 를 가지고 있습니다.

  ( na.rm : NA의 값을 지우고 계산 )

 

 

예제 ①

# 결측치 데이터 처리 함수

na <- function(x){
  # 1차: NA제거 
    print(x)
    print(mean(x, na.rm = T)) # na 항목을 제외하고 평균값 출력. 
    
  # 2차: NA를 0으로 대체 (데이터의 개수가 적을 때 사용)
    data <- ifelse(!is.na(x),x,0)  # is.na 결과가 T = 입력값 NA , NA 이면 0으로 대체 
    print(x)
    print(mean(data))
    
  # 3차: NA를 평균으로 대체 
    data2 <- ifelse(!is.na(x),x,round(mean(x, na.rm = T),2)) 
    # x,mean(x, na.rm = T) , 소수점 이하 5~6자리까지 출력
    # rounb 를 활용하여 소수점 이하 2자리까지만 출력
    
    print(data2)
    print(mean(data2))
      }

na(data)

 출력값 : 

 1차: NA제거 
 [1] 10 20  5  4 40  7 NA  6  3 NA  2 NA
 [1] 10.77778

 2차: NA를 0으로 대체
 [1] 10 20  5  4 40  7 NA  6  3 NA  2 NA
 [1] 8.083333

 3차: NA를 평균으로 대체
 [1] 10.00 20.00  5.00  4.00 40.00  7.00 10.78  6.00  3.00 10.78  2.00 10.78
 [1] 10.77833

결측치를 무조건 제거하면 정화한 통계량을 얻을 수 없으며, 데이터가 손실될 수 있습니다.

 

'빅데이터 > R' 카테고리의 다른 글

[R] 이산변수 시각화  (0) 2020.07.01
[R] 주요 내장 함수  (0) 2020.07.01
[R] 반복문 (for 문, while문)  (0) 2020.06.30
[R] 조건문 ( if 문, ifelse문 , swich문 , which문 )  (0) 2020.06.29
[R] 연산자  (0) 2020.06.27

+ Recent posts