Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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 30
Archives
Today
Total
관리 메뉴

초보자의 빅데이터 정복기

22-08-08 chap04_2_Function 본문

아이티월 수업일지(R)

22-08-08 chap04_2_Function

서부남93 2022. 8. 8. 14:33

#  chap04_2_Function

# 1. 사용자 정의 함수

#(형식)
#함수명 <- function(매개변수){
#실행문
# [return(값)] 
#}


#함수 정의

fx <- function(x){
  y <-x^2 +2*x +3
  #cat('y=',y)
  return(y)# 반환값
}

#함수 호출
fx(2) # x=2 , y= 11

#함수 호출
fx(3) # x=3, y= 18

# x와 fx 관계
x<- runif(100) # 난수 100개 
x
fx(x)

# 산점도
plot(x,fx(x)) #plot(x,y)

# 매개변수가 없는 함수 예

f1 <- function( ){
  cat("매개변수가 없는 함수")
}
f1() # 함수명으로 호출

#매개변수가 있는 함수 예
f2<- function(x){ # x: 가인수(매개변수)
  cat("x의 값 = ",x, "\n") # \n 줄바꿈
  print(x) # 변수만 사용
}
f2(15) # 함수 호출(실인수)

# 반환값이 있는 함수
f3 <- function(x,y){
  add <- x+y
  sub <- x-y
  div <- x/y
  mul <- x*y
  #return(add,sub)
  df <- data.frame(add, sub, div, mul)
  return(df)
}
f3
clac <- f3(10, 5)
print(clac)

# add sub div mul
#1  15   5   2  50

# 표본분산과 표본표준편차를 구하는 함수 정의하기
x<- c(7,15,12,9,15,6)

mean(x) #10.6666
var(x) #15.46667
sd(x) #3.932768
sqrt(var(x)) #3.932768

#표본분산 : var = sum((x- 산술평균)^2)/ (n-1)
#표본표준편차 : sd = sqrt(var)

#산술 평균 함수
avg <- function(x){
  return(sum(x)/length(x))
}

avg(x) # 10.66667

# 표본분산 & 표본표준편차
var_sd <- function(x){
  #1.산술평균
  a<- avg(x)
  # 2.분산 
  var = sum((x- a)^2)/ (length(x)-1)
  # 3. 표준편차
  sd = sqrt(var)
  cat('산술평가=',a,'\n')
  cat('분산=',var,'\n')
  cat('표준편차=',sd)
}
var_sd(x)
#산술평가= 10.66667 
#분산= 15.46667 
#표준편차= 3.932768

# 구구단 출력하기 (입력: 단수, 출력: 구구단)
gugu <- function(dan){
  cat('***',dan,'e단 **\n') #단수 출력
  for(i in 1:9){
    # 2*1 =2
    # 2*9 = 18
    cat(dan,'*',i,'=',dan*i,'\n')
  }
}
gugu(2)  
gugu(9)
gugu(18)

# 2. 내장함수 : R에서 제공하는 주요 내장함수

# 1) 기술통계 
vec <- round(runif(10, min=1, max=10))  #실수 -> 정수
vec
min(vec) # 벡터 대상 최소값
max(vec) # 벡터 대상 최대값
range(vec) # 벡터 대상 범위 값
mean(vec) # 벡터 대상 평균값
median(vec) # 벡터 대상 사분위수(중위수 = 중앙값)
sum(vec) # 벡터 대상 합계
sort(vec) # 오름차순  : 값 반환
sort(vec, decreasing = T) # 내림차순
order(vec) # 벡터의 정렬된 값의 인덱스를 보여줌
rank(vec) # 벡터의 각 원소의 순위를 알려줌
summary(vec) # 데이터에 대한 기본적인 통계 정보 요약
table(vec) # 데이터 빈도수
sd(vec) # 표준편차
var(vec) # 분산 

# 2) 반올림 관련 함수 
x <- c(1.5, 2.5, -1.3, 2.5)
ceiling(x) # 큰 정수 
floor(x) # 작은 정수 
round(x) # 반올림 - 정수가 짝수가 되도록 반올림

# 3) log 함수 
log(8) # 자연로그 : e 밑수 : 2.079442
log2(8) # 2 밑수 : 3
log10(10) # 상용로그 : 1


# 4) 행렬관련 함수
x <- matrix(1:9, nrow = 3, ncol = 3, byrow = T) # 3x3 정방행렬 
y <- matrix(1:3, nrow = 3) # 3x1 행렬  
dim(x) # 3 3
ncol(x) # 3 : 열 수 반환 
nrow(x) # 3 : 행 수 반환 
t(x) # x의 전치행렬 반환


# 5) 선형대수학: 벡터, 행렬 대상 연산 

# (1)대각행렬 : 대각선 값 반환
diag(x)  

#분류정확도 계산
sum(diag(x)) # 15

# (2)행렬곱 : x,y의 행과 열의 곱의 합 -> 상수 값
matmul <- x %*% y  
matmul

x2 <- matrix(1:4, nrow = 2)


#(3) 행렬식
det(x2) # 행렬식 : -2


# 6) 난수 생성 & 확률분포 
# 확률분포
# - 연속확률분포 : 값이 셀 수 없는 확률분포(0~1 실수, 키 분포)
# - 이산확률분포 : 값이 셀 수 있는 확률분포(동전, 주사위)
# 분석기사 : 유형이 다른 확률 분포 고르기
# -정규 분포, 지수 분포, z/f/t분포 , 이항분포

# (1) 표준정규분포 생성 : 연속확률분포
n = 1000 #표본 size
r <- rnorm(n, mean = 0, sd = 1) # N(0,1^2)
r
hist(r) #대칭성


# (2) 균등분포 생성 : 연속확률분포
r2 <- runif(n, min =0 , max =1) # 0~1 
r2
hist(r2) #균등성

# (3) 이항분포 생성 : 이산확률분포
#size=1(베르누이 분포)
rbinom(n=10, size=1, prob=0.5) # B(1,0.5) : 모수 1개
#n : 반복, size: (독립)시행횟수, prob: 성공확률
#[1] 1 1 0 0 1 1 1 0 1 0

set.seed(123) # 동일한 난수 제공 
rbinom(n=10, size = 1,prob = 0.5)

# size =n : 이항분포  : 모수 2개 이상
rbinom(n=10 ,size = 10,prob = 0.5) # B(10, 0.5)
# 7 6 6 9 6 6 5 5 4 3

# 7) 집합관련함수
x<- 1:5
y<- c(2,5,7)
x;y

union (x, y) # 집합 x와 y의 합집합
intersect (x, y) # 집합 x와 y의 교집합
setdiff (x, y) # x의 모든 원소 중 y에는 없는 x와 y의 차집합
setequal (x, y) # x와 y의 동일성 테스트
2 %in% y # c가 집합 y의 원소인지 테스트 # TRUE
4 %in% y # FALSE

for(i in x){
  if(i %in% y){
    cat(i,'y의 원소','\n')
  }else{
    cat(i,'y의 원소 아님','\n')
  }
}

'아이티월 수업일지(R)' 카테고리의 다른 글

22-08-09 chap06_1_Datahandling  (0) 2022.08.09
22-08-08 chap05_DataVisualization  (0) 2022.08.09
22-08-05 chap04_1_Control  (0) 2022.08.05
22-08-04 chap3_DataIO_String  (0) 2022.08.05
22-08-04 R프로그램 #chap_2 DataStructure  (0) 2022.08.04
Comments