[R] 제어문과 함수
programming/r

[R] 제어문과 함수

2. 제어문과 함수

 

2.1 조건문

x <- 7
print(x)

# x가 짝수면 출력
if (x %% 2 == 0)
  print("짝수")

# 짝수, 홀수 출력
if (x %% 2 == 0)
  print("짝수")
else
  print("홀수")

# 위와 동일
# ifelse(조건식, TRUE일 때, FALSE일 때)
ifelse(x %% 2 == 0, "짝수", "홀수")
a <- -9
if (a %% 2 == 0) {
  print(a)
  print("짝수입니다.")
  print(abs(a))
} else {
  print(a)
  print("홀수입니다.")
  print(abs(a))
}
point <- 95

# 정수 몫
grade <- point %/% 10
print(grade)

# as.character(): 숫자를 문자로
# as.numeric()
# as.logical()

# switch(조건식, 조건 1, 조건 2, 조건 3, 그 외의 조건)
switch(
  as.character(grade),
  "10" = print("A"),
  "9" = print("A"),
  "8" = print("B"),
  "7" = print("C"),
  "6" = print("D"),
  print("F")
)

 

2.2 반복문

sum1 <- 0

# 1부터 10까지 1씩 증가
# for(개별값 in 집합변수)
for (i in seq(1, 10, by = 1))
  sum1 <- sum1 + i
sum1
a <- 10
# print("a = " + a)

# 공백문자로 연결됨
paste("a=", a)

# 줄 바꿈을 하지 않음
cat("a =", a)

# 줄 바꿈을 추가
# cat("a =", a, "\n")
print(a)
dan <- 3
for (i in seq(1, 9)) {
  cat(paste(dan, "x", i, "=", dan * i, "\n"))
}
gugu <- function() {
  # 입력을 기다린다
  dan <- readline("단을 입력하세요: ")
  dan <- as.integer(dan)
  
  for (i in seq(1, 9)) {
    cat(paste(dan, "x", i, "=", dan * i, "\n"))
  }
}

gugu()
# 출력문에서 줄바꿈을 하고 싶을 경우 cat 사용
for (i in seq(2, 9)) {
  cat(paste("\n===== ", i, "단 =====\n"))
  for (j in seq(1, 9)) {
    cat(paste(i, "x", j, "=", i * j, "\n"))
  }
}
sum <- 0
i <- -1

while (i <= 10) {
  sum <- sum + i
  i <- i + 1
}

sum
sum3 <- 0
i <- 1

# 탈출 조건을 직접 작성해야 함
repeat {
  sum3 <- sum3 + i
  i <- i + 1
  if (i > 10)
    break
}

sum3

 

2.3 내장 함수

sqrt(5)
sqrt(c(1, 2, 3, 4, 5))
## 통계 관련 함수
a = c(1, 2, 3, 4, 5, 6, 7, 8)

# 통계량 정보
summary(a)

# 평균
mean(a)

# 중앙값
median(a)

 

2.4 사용자 정의 함수

2.4.1 함수 이름은 좌변에 작성

2.4.2 리턴 값이 없는 함수

# 리턴 값이 없는 함수
hello <- function() {
  print("hello")
}

hello()

 

2.4.3 리턴 값이 있고 인수가 없는 함수

# 리턴 값이 있고 인수가 없는 함수
test1 <- function() {
  x <- 10
  y <- 20
  return(x * y)
}

test1()

 

2.4.4 리턴 값이 있고 인수가 있는 함수

# 리턴 값이 있고 인수가 있는 함수
test2 <- function(x, y) {
  xx <- x
  yy <- y
  return(sum(xx, yy))
}

test2(10, 20)

 

2.4.5 함수에서 함수를 호출하는 경우

test3 <- function(x, y) {
  x3 <- x + 1
  y3 <- y + 1
  x4 <- test2(x3, y3)
  return(x4)
}

test3(9, 19)
# 함수의 계산 결과를 화면에 보이지 않고 변수에 대입하는 경우(invisible)
test4 <- function() {
  x <- 10
  y <- 10
  # return(x * y)
  return(invisible(x * y))
}

# 함수 호출. 결과는 화면에 보이지 않는다
test4()

# 함수의 리턴 값이 result 변수에 할당된다
result <- test4()

# 결괏값 확인
result