59doit

[ R ] 연산자 & 조건문 & 반복문 본문

Programming/R

[ R ] 연산자 & 조건문 & 반복문

yul_S2 2022. 11. 17. 14:33
반응형

연산자

  • 산술연산자, 관계연산자, 논리연산자

 

 

(1) 산술연산자

  • 사칙연산(+, -, *, /), 나머지 계산 연산자(%%), 거듭제곱(^ 또는 **)계산 연산

 

 

ex ) 산술연산자 사용

 

num1 <- 100 
num2 <- 20
result <- num1 + num2
result
# [1] 120
result <- num1 - num2
result
# [1] 80
result <- num1 * num2
result
# [1] 2000
result <- num1 / num2
result
# [1] 5
result <- num1 %% num2
result
# [1] 0
result <- num1 ^ 2
result
# [1] 10000
result <- num1 ^ num2
result
# [1] 1e+40

 

  • “1e+40” : “1 * 10^40”과 같은 결과를 나타냄

 

(2) 관계연산자

  • 관계연산자(==, !=, >, >=, <, <=)
  • 관계식의 결과가 참이면 TRUE, 거짓이면 FALSE값을 반환하는 연산자

ex )  관계연산자 사용

boolean <- num1 == num2
boolean
# [1] FALSE

boolean <- num1 != num2
boolean
# [1] TRUE

boolean <- num1 > num2
boolean
# [1] TRUE

boolean <- num1 >= num2
boolean
# [1] TRUE

boolean <- num1 < num2
boolean
# [1] FALSE

boolean <- num1 <= num2
boolean
# [1] FALSE

 

 

 

(2) 논리연산자

  • TRUE / FALSE 값 반환

 

ex )  논리연산자 사용

num1 <- 100
num2 <- 20


logical <- num1 >= 50 & num2 <= 10
logical 
# T T => F

logical <- num1 >= 50 | num2 <= 10
logical 
# T T => TRUE

logical <- num1 >= 50
logical
# TRUE

logical <= !(num1 >= 50)
# FALSE
logical
# TRUE




x <- TRUE; y <- FALSE
xor(x, y) 
#TRUE

x <- TRUE; y <- TRUE
xor(x, y) 
#FALSE

x <- FALSE; y <- TRUE
xor(x, y) 
#TRUE

x <- FALSE; y <- FALSE
xor(x, y) 
#FALSE

 

 

 

조건문

if(), ifelse(), switch(), which()함수 

 

 

(1) if()문ifelse()함수

if(조건식) { 참인 경우 처리문

 }else { 거짓인 경우 처리문

}

 

  • { }을 이용하여 if와 else의 블록을 지정한다.

 

ex ) if()함수 사용

x <- 50; y <- 4; z <- x * y

if(x * y >= 40) {
  cat("x * y의 결과는 40이상입니다.\n")
  cat("x * y = ", z)
} else {
  cat("x * y의 결과는 40미만입니다. x * y = ", z, "\n")
}

# x * y의 결과는 40이상입니다.
# x * y =  200

 

 

 

ex )  if()함수 이용 점수의 학점 산출

score <- scan()

score
result <- "노력"
if(score >= 80) {
  result <- "우수"
}

cat("당신의 학점은 ", result, score)

 

 

 

ex )  if~else if 형식으로 학점 산출

score <- scan()

if(score >= 90) {
  result = "A학점"
} else if(score >= 80) {
  result = "B학점"
} else if(score >= 70) {
  result = "C학점"
} else if(score >= 60) {
  result = "D학점"
} else {
  result = "F학점"
}

cat("당신의 학점은", result)
print(result)

 

 

(2) ifelse()함수

  • 조건식이 참인 경우와 거짓인 경우 처리할 문장을 ifelse()문에 포함 
  • Ifelse(조건식, 참인 경우 처리문, 거짓인 경우 처리문)

 

ex )  ifelse()함수 사용

score <- scan()
ifelse(score >= 80, "우수", "노력")
ifelse(score <= 80, "우수", "노력")

 

 

 

ex )  ifelse()함수 응용

excel.csv
0.00MB

 

 

excel <- read.csv("C:/excel.csv", header = T)
q1 <- excel$q1
q1
ifelse(q1 >= 3, sqrt(q1), q1)

 

 

 

ex )  ifelse()함수에서 논리연산자 사용

ifelse(q1 >= 2 & q1 <= 4, q1 ^ 2, q1

 

 

 

(3) switch()함수

 

  • 비교 문장의 내용에 따라 여러 개의 실행문 중 하나를 선택할 수 있도록 프로그램 작성
  • switch(비교문, 실행문1 [, 실행문2, 실행문 3, …])
  • 비교문 위치에 있는 변수의 이름이 실행문 위치에 있는 변수의 이름과 일치할 때 일치하는 변수에 할당된 값을 출력

 

ex ) switch()함수를 사용하여 사원명으로 급여정보 보기

switch("name", id = "hong", pwd = "1234", age = 105, name = "홍길동")
       

empname <- scan(what = "")
empname
switch(empname, 
       hong = 250, 
       lee = 350,
       kim = 200,
       kang = 400
)

 

 

 

(3) witch()함수

  • 벡터 객체를 대상으로 특정 데이터를 검색하는데 사용되는 함수
  • 조건식이 결과가 참인 벡터 원소의 위치(인덱스)가 출력되며, 조건식의 결과가 거짓이면 0이 출력된다.
  • which(조건)

ex )  벡터에서 which()함수 사용하여 index값 반환

name <- c("kim", "lee", "choi", "park")
which(name == "choi")
# [1] 3

 

ex ) 데이터프레임에서 which()함수 사용

  • 데이터프레임에서 해당 원소가 없으면 0이 출력
  • which함수는 크기가 큰 데이터프레임이나 테이블 구조의 자료를 대상으로 특정 정보를 검색하는데 사용

#1데이터프레임 생성

no <- c(1:5)
name <- c("홍길동", "이순신", "강감찬", "유관순", "김유신")
score <- c(85, 78, 89, 90, 74)
exam <- data.frame(학번 = no, 이름 = name, 성적 = score)
exam
#   학번   이름 성적
# 1    1 홍길동   85
# 2    2 이순신   78
# 3    3 강감찬   89
# 4    4 유관순   90
# 5    5 김유신   74

#2  일치하는 이름의 인덱스 반환

which(exam$이름 == "유관순")
exam[4,]
  # 학번   이름 성적
# 4    4 유관순   90

 

 

 

반복문

  • 조건에 따라서 특정 실행문을 지정된 횟수만큼 반복적으로 수행할 수 있는 문
  • for()함수, while()함수

 

(1) for()함수

  • 지정한 횟수만큼 실행문을 반복 수행하는 함수
  •  for(변수 in 변수) {실행문}

 

 

ex )  for()함수 사용

i <- c(1:10)

for(n in i) {
  print(n * 10)
  print(n)
}
# [1] 10
# [1] 1
# [1] 20
# [1] 2
# [1] 30
# [1] 3
# [1] 40
# [1] 4
# [1] 50
# [1] 5
# [1] 60
# [1] 6
# [1] 70
# [1] 7
# [1] 80
# [1] 8
# [1] 90
# [1] 9
# [1] 100
# [1] 10
  • 반복할 문장이 하나 뿐일 때는 { } 생략 가능

 

 

ex )  짝수 값만 출력

i <- c(1:10)

for(n in i)
  if(n %% 2 == 0)
    print(n)
# [1] 2
# [1] 4
# [1] 6
# [1] 8
# [1] 10
  • %%연산자: 나머지 계산

 

 

ex )  짝수이면 넘기고, 홀수 값만 출력

i <- c(1:10)

for(n in i) {
  if(n %% 2 == 0) {
    next    
  } else {
    print(n)
  }
}
# [1] 1
# [1] 3
# [1] 5
# [1] 7
# [1] 9
  • next문: for()함수의 반복 범위에서 문장을 실행하지 않고 계속 반복할 때 사용

 

 

ex )  변수의 컬럼명 출력

name <- c(names(exam))

for(n in name) {
  print(n)
}

# [1] "학번"
# [1] "이름"
# [1] "성적"

 

 

ex ) 벡터 데이터 사용

score <- c(85, 95, 98)
name <- c("홍길동", "이순신", "강감찬")
i <- 1

for(s in score) {
  cat(name[i], " -> ", s, "\n")
  i <- i + 1
}

# 홍길동  ->  85 
# 이순신  ->  95 
# 강감찬  ->  98

 

(2) while()함수

  • for()함수는 반복 회수를 결정하는 변수를 사용.
  • While()함수는 사용자가 블록 내에서 증감식을 이용하여 반복 회수를 지정해야 한다
  • while(조건) { 실행문 }

ex )  while()함수 사용

i=0

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

 

 

 

반응형

'Programming > R' 카테고리의 다른 글

[ R ] 주요 내장함수  (0) 2022.11.18
[ R ] 함수의 정의  (0) 2022.11.18
[ R ] 연습문제 (3)  (0) 2022.11.17
[ R ] 데이터 입출력  (0) 2022.11.17
[ R ] 연습문제 (2)  (0) 2022.11.16
Comments