13 min to read
R-Studio Function(함수 만들기)
R-Studio의 함수 만들기
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)
Comments