R-Studio Scan, For문, While문, Switch문, if문

R-Studio의 반복문, 조건문, 키보드입력 함수

Featured image

R-Studio 의 반복, 조건, 입력함수

for 와 while 문은 조건에 따라 코드를 반복 시켜준다.
if 와 switch 문은 참과 거짓 조건의 따라 결과를 출력 해준다.

꼭 알아야할 연산자

이름 연산자 이름 사용법
더하기 + num1 + num2
빼기 - num1 - num2
곱하기 * num1 * num2
제곱하기 ^ 또는 ** num1 ^ num2
num1 ** num2
/ num1 / num2
나머지 %% num1 %% num2
같다 == num1 == num2
같지않다 != num1 != num2
초과 > num1 > num2
미만 < num1 <> num2
이상 >= num1 >= num2
이면서 & num1>=10 & num2<3
이거나 | num1>=10 | num2<3
아니면 !(조건) !(num1>=10) | num2<3


함수 예제

# 사칙연산 은 너무 상식이라 제외.
################################### 관계연산
result <- num1 == num2
result
# [1] FALSE
result <- num1 != num2
result
# [1] TRUE
result <- num1 > num2
result
# [1] TRUE
result <- num1 <= num2
result
[1] FALSE

################################## 논리연산
result <- num1>=10 & num2<3
result
# [1] FALSE
result <- num1>=10 | num2<3
result
# [1] TRUE
result <- !(num1>=10) | num2<3
result
# [1] FALSE

################################## 특이한 함수.
name <- LETTERS[1:5] # 소문자 letters[1:5] 는 소문자로 a b c d e로 벡터 생성
name
# [1] "A" "B" "C" "D" "E"

# 스캐너 씀. what은 상수. 키보드로부터 입력받음.
# 정수만 입력받기
# 입력 다하고나서 공백 입력 시켜줘야 끝남.
findName <- scan()
# 1: 1
# 2: 12
# 3: 123
# 4: 
# Read 3 items
findName
# [1]   1  12 123

findName <- scan(what=character())
# 1: 1
# 2: 12
# 3: 123
# 4: a
# 5: 가나
# 6: abc
# 7: 가나다
# 8: 
# Read 7 items
findName
# [1] "1"      "12"     "123"    "a"      "가나"   "abc"    "가나다"

findName <- scan(what=character())
# 1: 가
# 2: 123
# 3: 44
# 4: 나
# 5: 
# Read 4 items
name <- c("가", "123")
result <- which(name == findName)
result
# [1] 1 2
# findName 에 입력받은 벡터 와 name 벡터를 비교해서 값이 같은
# 벡터 인덱스 값을 출력 해줌.

# 실습을 위해 프레임 만들기~
# 프레임 만듬
no <- c(1:5)
score <- c(75, 80, 85, 90, 95)
exam <- data.frame(no=no, name=c("A", "B", "C", "D", "E"), score=score)
exam
#   no name score
# 1  1    A    75
# 2  2    B    80
# 3  3    C    85
# 4  4    D    90
# 5  5    E    95

# 검색 하고 싶은 사람 입력 받고
findName <- scan(what=character())
# 1: A
# 2: B
# 3: C
# 4: 
# Read 3 items
findName
# [1] "A" "B" "C"
myIndex <- which(exam$name == findName) # 있나 없나 확인
# Warning messages:
# 1: In `==.default`(exam$name, findName) :
#   longer object length is not a multiple of shorter object length
# 2: In is.na(e1) | is.na(e2) :
#   longer object length is not a multiple of shorter object length
myIndex
# [1] 1 2 3
exam[myIndex, ] # 일치하는 인덱스로 출력
#   no name score
# 1  1    A    75
# 2  2    B    80
# 3  3    C    85

# 조건 제어문
x = 6
y = 5

z = x*y
z
# [1] 30

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

# 벡터를 활용해 조건제어 하기
jumsu <- c(10, 15, 20, 33)
comment <- ifelse(jumsu%%2==0, "짝수", "홀수")
comment
# [1] "짝수" "홀수" "짝수" "홀수"

# 다중택일
score <- 90
ifelse(score>=90, "A", 
       ifelse(score>=80, "B", 
              ifelse(score>=70, "C", 
                     ifelse(score>=60, "D", "F"))))
# [1] "A"

# switch 구문
# 맨앞 key 값을 뒤 요소들중 찾는 함수.
# name을 뒤 id name age 중 맞는 컬럼의 value 값을 출력함
switch ("name", id="hong", name="홍길동", age=15)
# [1] "홍길동"
switch ("birth", id="hong", name="홍길동", age=15)

# 반복제어문
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

#while문
# 1부터 10까지 더함
total <- 0
i <- 1
while (i <= 10) {
  total <- total + i
  i <- i + 1
}
cat("결과 : ", total)
# 결과 :  55

# break 사용
x <- 0
while (x < 10) {
  x <- x + 1
  if (x == 5) {
    break;
  } 
  print(x)
}

# [1] 1
# [1] 2
# [1] 3
# [1] 4

# next 사용 continue 같음.
# 3의 배수라면 출력 하지 않고 while 처음으로 돌아감
x <- 0
while (x < 10) {
  x <- x + 1
  if( x%%3 == 0 ) {
    next
  }
  
  print(x)
}

# [1] 1
# [1] 2
# [1] 4
# [1] 5
# [1] 7
# [1] 8
# [1] 10

# for문 
result <- 0
for(i in seq(1, 10, by=1)) {
  result <- result + i
}
result
# 결과 :  55

# 1부터 입력 받은 정수까지의 덧셈의 총합
# 5를 입력 받으면 1+2+3+4+5 = 15
num <- scan()
result <- 0
for (i in seq(1, num, by=1)) {
  result <- result + i
}
result

# 3 또는 5의배수의 총합
result <- 0
for(i in seq(1, 100, by=1)) {
  
  ifelse((i%%3==0)|(i%%5==0), result<-result+i, "")
}
result
# [1] 2418