Review - 반복문 복습
n = 21
for(i in 1:100){
cat("collatz : NOW =", n, "\n")
if (n %% 2 == 0){
n = n / 2
} else {
n = n*3 + 1
}
if(n == 1){
cat("collatz : END =", n, "\n")
break
}
}
사용자 정의 함수
function(<para1>, <para2>, ....){<expression>}
para1, 2 는 매개변수,
expression은 매개변수를 활용한 함수식
예시1
Ex0 = function(x) {7*x+5}
Ex0(3)
Ex1 = function(x){
y = 7*x + 5
# 별도로 객체를 정의하여 값을 저장하면
# 함수를 실행시키더라도 함수값을 출력해주지 않음.
}
Ex1(4)
y
# 함수 안에서 만들어진 변수는 함수가 종료되면 없어짐.

예시2
Ex2 = function(x){
x^2 + 3*x - 6
}
Ex2(10)
반환하고 싶을 때는 return(<object>)를 사용하여야 함.
Ex1 = function(x){
y = 7*x + 5
return(y)
}
Ex1(4)
return을 쓰면 함수를 호출했을 때
함수 내에서 저장한 변수를 return(y)로 반환해줄 수 있음.
return 예시 1
Ex3 = function(x){
a = x^2 + 3*x - 6
b = 2*x^2 - exp(2)
return(a+b)
}
Ex3(10)
return 예시 2
Ex4 = function(x){
return(x[2] + x[3])
}
Ex4(c(1:5))
매개변수는 단순한 숫자 뿐만 아니라 벡터도 들어갈 수 있음.
다수의 매개변수와 기본값을 설정한 함수
Ex5 = function(threshold = 0, vec){
return(sum(vec > threshold))
}
Ex5(3, -3:10)
Ex5(vec = -3:10)
Ex5(3, -3:10) 코드는 순서대로 매개변수의 속성에 맞게 넣었기 때문에 오류가 없이 출력이 된다.
그러나 Ex5(vec = -3:10) 은 현재 threshold의 값을 따로 설정해주지 않았기 때문에 매개변수의 순서에 맞게 넣는게 아니다.
따라서 -3:10이 어떤 매개변수에 해당하는지 적어줘야한다.
다수의 매개변수, 기본값 예시
Ex6 = function(n, mu, sig, value = 0){
set.seed(100)
tmp = rnorm(n, mu, sig)
if(min(tmp) > value){
result = max(tmp) - min(tmp)
} else {
result = value - min(tmp)
}
return(result)
}
Ex6(4, 6, 3)
Ex6(4, 6, 3, 6)
연습하기
최솟값 찾기
# Find minimum by function ----
my.min = function(x){
mini = x[1]
for (i in 1:length(x)){
if (mini > x[i]){
mini = x[i]
} else {
mini = mini
}
}
return(mini)
}
set.seed(100)
x = runif(100, 0, 30)
my.min(x)
코드 설명
1. 첫 번째 값을 초기값으로 지정
2. 다음 값과 비교 후 더 작으면 그대로 유지
3. 만약 다음 값이 더 작을 경우 그 값으로 대체
4. 반복문을 이용하여 가장 작은 값 찾기
unif >>> 균등분포
팩토리얼
# Find Factorial
my.fac = function(n) {
if (n == 0) {
n = 1
} else{
n = n * my.fac(n - 1)
}
return(n)
}
my.fac(8) == factorial(8)
사용자 정의 함수는 함수 안에서 사용자 정의 함수를 사용할 수 있다.
ex)
ft1 = function(x){n = n*ft1(n-1)}
파이썬의 재귀함수를 생각하면 쉽게 이해할 수 있다.
연습문제
Q1 > f(x,y) = x^2 + y^2
Q2 > x값이 주어졌을 때 x값이 양수이면 x를 출력하고 양수가 아니면 x의 절댓값을 출력하는 함수
Q3 > n값이 주어졌을 때 N(5,2)에서 n개의 값을 뽑은 벡터의 최솟값과 최댓값의 합을 산출하는 함수
# practice subject ----
# 1 ----
Q1 = function(x, y){
return(x^2 + y^2)
}
# 2 ----
Q2 = function(x){
if(x > 0){
print(x)
} else {
print(abs(x))
}
}
# 3 ----
Q3 = function(n){
return(max(rnorm(n, 5, 2)) + min(rnorm(n, 5, 2)))
}
'프로그래밍 > R프로그래밍' 카테고리의 다른 글
R프로그래밍 - simulation (0) | 2023.12.04 |
---|---|
R프로그래밍 - 오름차순 정렬 (0) | 2023.12.04 |
R프로그래밍 - 반복문 (1) | 2023.11.13 |
R프로그래밍 - 난수발생 (0) | 2023.11.13 |
R프로그래밍 - 분포 관련 함수 (0) | 2023.11.08 |