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 |