초보자의 빅데이터 정복기
22-08-08 chap04_2_Function 본문
# 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 |