R-Studio Function(함수 만들기)

R-Studio의 함수 만들기

Featured image

R-Studio 도 함수를 만들 수 있다.

function() 을 이용해 함수를 만들수 있다.
scan() 함수 때문에 한줄한줄 실행해야 한다.
ggplot 패키지 를 설치해야한다.

사용된 함수

이름 함수이름 사용법
Function function() dim(데이터 구조 를 담고있는 변수)

파일 소스

우클릭 -> 다른이름으로 링크저장 이용해 주세요
jumsunew.csv

사용 예시 소스코드

# function 만들기.
myFunction <- function( x ) {
  result <- 2*x+1
  return( result )
}

x <- 1
result <- myFunction(x)
result

# 배열 넘기기
vec <- c(1:3)
result <- myFunction(vec)
result

# 그래프 그리기
x <- seq(-1, 3, by=0.1)
y <- myFunction(x)

qplot(x, y)

# myfunction2 를 구현 하라
# y = x1 + 2 * x2 - 3
# x1 x2 y

myFunction2 <- function( x1, x2 ) {
  result <- x1+2 * x2-3
  return(result)
}

y <- myFunction2(1, 1)00
y

y <- myFunction2(1, 2)
y

y <- myFunction2(2, 1)
y

# 2차방정식 그래프
myFunction3 <- function( x ) {
  result <- (2*(x^2))-(3*x)+1
  return(result)
}

x <- seq(0, 1.5, by=0.01)
y <- myFunction3( x )
qplot(x, y)

# 피타고라스 정의
# 점 a(x=1, y=4), b(x=1, y=1), c(x=5, y=1) 가 있다.
# 두 점의 길이는 다음과 같이 구한다.
# 루트((x1-x2)**2 + (y1-y2)**2)
# 
# 예를 들면, 선분 ab의 길이는 다음과 같다.
# 루트((x1-x2)**2 + (y1-y2)**2) = 루트((1-1)**2 + (4-1)**2) = 3.0이다.
# 이러한 기능을 수행하는 함수 get_length() 함수를 구현하시오.
# 이 함수를 이용하여 선분 ab와 bc의 길이를 각각 구하시오.
# 변수 abline : 선분 ab의 길이 
# 변수 bcline : 선분 bc의 길이 
# 
# 직각 삼각형에서 선분 ab와 bc를 두 변으로 하는 빗변의 길이를 구해주는 함수
# pythagoras 함수를 정의하고 빗변의 길이를 구하는 프로그램을 작성하시오. 
# 빗변 구하는 공식 : 루트((변1)**2 + (변2)**2)

a <- c(1, 4)
b <- c(1, 1)
c <- c(5, 1)

# 선분 길기 값을 구하는 함수
get_length <- function( x, y ) {
  result <- sqrt(((x[1]-y[1])**2 + (x[2]-y[2])**2))
  return(result)
}

# 선분 값을 구한다
ab <- get_length(a, b)
bc <- get_length(b, c)
ab
bc

# 피타고라스 값을 구한다.
pythagoras <- function(x, y) {
  result <- sqrt(x**2 + y**2)
  return(result)
}

# 피타고라스 함수를 사용한다.
pythagoras(ab, bc)

# 최솟값 최댓값 구하기
jumsu <- read.csv("jumsunew.csv")
jumsu

min(jumsu$math)
max(jumsu$math)
range(jumsu$eng)
mean(jumsu$math)

# 정렬부터 해보기
sort(jumsu$math)

# 중위수
median(jumsu$math)


# 합계
sum(jumsu$math)

# 값 순위
jumsu$math
order(jumsu$math)

jumsu
# 순위
choice01 <- sample(1:nrow(jumsu), 2)
choice01
jumsu[choice01, ]

# 점수 빈도표
myTable <- table(jumsu$math)
myTable

# bool 테스트
boolTest <- jumsu$math %% 3 == 0
boolTest

# mathFunction
getwd()
data <- read.csv("mathfunc.csv")
data

dataKor <- data$kor
dataKor

# 제곱근
sqrt(dataKor)
# 올림
ceiling(dataKor)
# 버림림
floor(dataKor)
# 반올림
round(dataKor)
# 누적시켜서 늘림.
cumsum(dataKor)

# 1 ~ 55 까지 더함
a <- cumsum(seq(1, 10, by=1))
a[length(a)]

# 최대 최소 값 인덱스를 구함.
which.max(dataKor)
which.min(dataKor)

# pi(radian) = 
pi
sin(pi/2)
cos(pi/2)
tan(pi/4)

# 수학 함수
log(10)
log10(10)
# 절댓값
abs(-3)
# 벡터
vec <- c(1, 2, 3, 4)
# 벡터값 다 곱해줌.
prod(vec)

# PMAX
pmax(dataKor)
pmax(data)

# 벡터
c1 <- c(1, 2)
c2 <- c(4, 1)
# 행렬
matrixA <- cbind(c1, c2)
matrixA
nrow(matrixA)
ncol(matrixA)

apply(matrixA, 1, sum)

# 메트릭스 반전 시킴
matrixAT <- t(matrixA)
matrixAT

# n*n행렬 만들어줌
diag(2)
     
# 역행렬 
solveMat <- solve(matrixA)
solveMat

# 단위행렬
diagMat <- matrixA %*% solveMat
diagMat

# 벡터 비교
x <- c(1, 2, 3, 4)
y <- c(4, 6, 3, 2)
setequal(x, y)
y <- c(1, 2, 3, 4)
setequal(x, y)

x <- c(1, 2, 3, 4)
y <- c(3, 4, 5, 6)

# 합집합
myUnion <- union(x, y)
myUnion

# 교집합
myIntersect <- intersect(x, y)
myIntersect

# 차집합
# x - y
x_minus_y <- setdiff(x, y)
x_minus_y
# y - x
y_minus_x <- setdiff(y, x)
y_minus_x

# X에 myFind가 있는지 없는지.
x
myFind <- 6
result <- myFind %in% x
result

# x나 y에 숫자 6이 들어 있으면 yes 아니면 no를 출력하시오.
x <- 6
y <- 3
result <- ifelse((x %in% 6)|(y %in% 6), "yes", "no")
result

# 테스트 문제
data <- c(1:5)
myFind <- c(2, 6, 3, 1)

result <- myFind %in% data
result


jumsu <- read.csv("jumsunew.csv")
jumsu

score <- jumsu[3:5]
score

# 과목별 최소 점수들을 벡터 변수 vec01에 저장하세요.
minKor <- min(score$kor)
minEng <- min(score$eng)
minMath <- min(score$math)

vec01 <- c(minKor, minEng, minMath)
vec01

# 과목별 최대-최소 점수를 벡터 vec02 에 저장 하세요.
vec02 <- c(max(score$kor), max(score$eng), max(score$math)) - vec01
vec02

# 국어점수 중에서 짝수의 개수를 반환하는 함수 를 정의 하세요.
colKor <- score$kor
colKor

myFunctionEven <- function( x ) {
  result <- 0  
  for (i in x) {
    ifelse(i%%2==0, result<-result+1, 0)
  }
  
  return(result)
}

a <- myFunctionEven(colKor)
a

# 다음문장을 테스트 하라.
myKor <- jumsu$kor
result <- myFunctionEven(myKor)
cat("count : ", result)

# 약수 구하기
num <- scan()
userVector <- seq(1, num, by=1)

getFactor <- function( vec ) {
  
  result <- c()
  for (i in vec) {
    if(vec[length(vec)] %% i == 0) {
      result <- c(result, i)
    }
  }
  
  return(result)
}

getFactor(userVector)