11 min to read
R-Studio Scan, For문, While문, Switch문, if문
R-Studio의 반복문, 조건문, 키보드입력 함수
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
Comments