Chapter 3 Flow-control

3.1 흐름제어

3.1.1 if문

if (3 < 10) {
  print("TRUE")
  print("3은 10보다 작습니다.")
} else {
  print("FALSE")
  print("설마 그럴 리가요")
}
## [1] "TRUE"
## [1] "3은 10보다 작습니다."

3.1.2 ifelse문

x1 <- c(10,11,12,13,14)
ifelse ( x1 %% 2 == 0, "짝수", "홀수")
## [1] "짝수" "홀수" "짝수" "홀수" "짝수"

3.1.3 else if문

for(i in 1:4)
{
  if(i==1) {print('하나')}
  else if(i==2) {print('둘')}
  else if(i==3) {print('셋')}
  else {print('넷')}
}
## [1] "하나"
## [1] "둘"
## [1] "셋"
## [1] "넷"

3.1.4 연습문제

아래 테이블 과 같은 형태로 데이터 프레임을 만들고 grade 컬럼을 추가하세요

(grade는 200이상일때는 A, 100이상일때는 B, 100미만일때는 C)

## Warning: package 'knitr' was built under R version 4.0.2
Table 3.1: 연습문제 테이블
no name pay grade
1 김재진 110 B
2 구영후 150 B
3 김반장 80 C
4 지소윤 210 A
no <- c(1:4)
name <- c("김재진","구영후","김반장","지소윤")
pay <- c(110,150,80,210)
test_table <- data.frame(no,name,pay)

test_table$grade <- ifelse(test_table$pay >= 200, "A" , ifelse(test_table$pay >= 100, "B",  "C"))

test_table
##   no   name pay grade
## 1  1 김재진 110     B
## 2  2 구영후 150     B
## 3  3 김반장  80     C
## 4  4 지소윤 210     A

3.1.5 for문

for (i in 1:10){
  print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10

3.1.6 while 문

i <- 0
while(i <= 10){
  print(i)
  i <- i +1
}
## [1] 0
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10

3.1.7 while-next 문

짝수만 출력

i <- 0
while(i<=9){
  i <- i+1
  if(i %% 2 !=0){
    next # print() 를 수행하지 않고 while 문의 처음으로 감
  }
  print(i)
}
## [1] 2
## [1] 4
## [1] 6
## [1] 8
## [1] 10

3.1.8 repeat 문

i <- 1
repeat{
  print(i)
  if(i >= 10){
    break
  }
  i <- i+1
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10

3.2 연산자

나머지 연산

x <- c(1, 10, 13, 3)
x %% 2 # 나머지연산
## [1] 1 0 1 1
x%/% 3 # 정수나누기의 몫
## [1] 0 3 4 1

부등식/부정

x > 3  # 부등식 
## [1] FALSE  TRUE  TRUE FALSE
y <- c(3, 5, 2, 1)
x > y    # 부등식 - 벡터간 비교 
## [1] FALSE  TRUE  TRUE  TRUE
z <- TRUE
!z      # Not
## [1] FALSE

논리 연산

x1 <- c(T, T, F, F)
y1 <- c(F, F, T, F)
x1 | y1  # or 벡터연산 
## [1]  TRUE  TRUE  TRUE FALSE
T || F   # 처음 값만 비교: 단일값 
## [1] TRUE
x1 &  y1  # and 벡터연산 
## [1] FALSE FALSE FALSE FALSE
x1 && y1  # 처음 값만 비교: 단일값
## [1] FALSE

##내장함수 {#ClassID2-11}

a <- 1:5
sqrt(a) #제곱근
## [1] 1.000000 1.414214 1.732051 2.000000 2.236068
exp(a) #지수함수
## [1]   2.718282   7.389056  20.085537  54.598150 148.413159
out <- (a + sqrt(a))/(exp(2)+1); out
## [1] 0.2384058 0.4069842 0.5640743 0.7152175 0.8625604
x1 <- seq(-2, 4, by = .5); x1 
##  [1] -2.0 -1.5 -1.0 -0.5  0.0  0.5  1.0  1.5  2.0  2.5  3.0  3.5  4.0
floor(x1) #내림
##  [1] -2 -2 -1 -1  0  0  1  1  2  2  3  3  4
trunc(x1) #소수점 제거
##  [1] -2 -1 -1  0  0  0  1  1  2  2  3  3  4
a <- c(1,-2,3,-4)
b <- c(-1,2,-3,4)
min(a,b) # 전체 벡터에서 최소값만 반환
## [1] -4
pmin(a,b) # 벡터 요소별로 비교하여 최소값만 반환
## [1] -1 -2 -3 -4

print: 객체의 값을 화면에 출력

a <- c(5,3,6,2,4)
print(a)
## [1] 5 3 6 2 4

cat: 문자열 및 연산결과를 동시에 출력 화면에 프린트

cat("mean of a is ",mean(a), "variance of a is ", var(a),"\n")
## mean of a is  4 variance of a is  2.5

substr(x, start, stop): 문자열에서 일부 추출

x <- c("강감찬","이순신", "계백", "손흥민") 
substr(x, 1, 2) 
## [1] "강감" "이순" "계백" "손흥"