일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- :
- 함수
- TXT
- 연습문제
- 데이터 타입
- 데이터 타입의 우선순위
- factor
- data frame
- R 기초
- REP
- 네이버 영화 댓글
- Crawling
- stringr
- seq
- vector 비교
- ROTTEN TOMATOES
- 변수 선언
- scraping
- length
- vector 연산
- Data Structure
- Names
- 데이터 입출력
- 문자열처리
- CSV
- working directory
- 정규표현식
- c()
- 스크래핑
- R 개요
- Today
- Total
study blog
제어문 - 조건문(if, ifelse) & 반복문(for, while) / 사용자 정의 함수 본문
1. 제어문
1-1. 조건문(if, ifelse)
① if구문
var1 = 100
var2 = 20
# 조건에 따라서 실행되는 code block을 제어할 수 있음
if(var1>var2){
cat("참")
} else if(var1==var2){
cat(" ")
} else {
cat("거짓")
}
② ifelse: JAVA의 3항 연산자
ifelse(var1>var2,"참","거짓")
1-2. 반복문(for, while)
① for: 반복 횟수만큼 반복 실행 – 정해진 수
for(var1 in 1:5){
print(var1)
}
② while: 조건이 참일 동안 반복 실행 -조건 주어질 때
idx = 1; mySum = 0
while (idx <10){
mySum = mySum+idx
idx=idx+1
} #한 라인이 statement로 인식됨. ;사용하면 여러 statement 실행 가능
mySum #sum(1:9)
ex) 로직(제어문을 이용해서) 1부터 100 사이에 있는 3의 배수를 출력하시오.
for(var1 in 1:100){
if(var1%%3==0){
print(var1)
}
}
ex) 1부터 100 사이에 있는 prime number (소수)를 출력하시오.
myPrime = function(n){
sol =c();
for(var1 in 2:n){
result = 0;
for(i in 1:var1){
if(var1 %% i ==0) {
result <- result+1
}
i = i+1
}
if(result==2){
sol <- c(sol,var1)
}
}
return(sol)
}
2. 사용자 정의 함수 (User Define Function)
제공된 함수 외에 함수를 만들어 사용할 수 있음
함수명 <- function(x){ } 형태
ex) 입력받은 숫자를 제곱해서 돌려주는 함수를 하나 만들어 보자.
myFunc = function(x){ #function(x,y,z): 입력 인자의 개수 조절 가능
x = x*x
return(x)
}
myFunc(2)
ex) sum함수와 동일한 역할을 하는 mySum 함수 만들어보자- vector를 입력으로 받아서 합을 구해주는 함수
mySum = function(x){
result = 0
for(t in x){
result = result+t
}
return(result)
}
var1 = 1:10
mySum(var1)
[연습문제]
1.
사용할 데이터: 2 3 5 6 7 10
[연습문제 1] 주어진 데이터로 vector x를 생성하시오.
x <- c(2,3,5,6,7,10)
[연습문제 2] 주어진 데이터 각각을 제곱해서 vector x를 생성해라.
x <- c(2,3,5,6,7,10)^2
[연습문제 3] 주어진 데이터 각각을 제곱해서 합을 구해라.
sum(c(2,3,5,6,7,10)^2)
[연습문제 4] 5보다 큰 값들로 구성된 vector x를 구하시오.
var1 <- c(2,3,5,6,7,10)
x <- var1[var1>5]
var1 <- c(2,3,5,6,7,10)
var2 <- c(2,3,5,6,7,10)>5 # mask
x2 <- var1[var2]
[연습문제 5] vector x의 길이를 구하시오.
x = c(2,3,5,6,7,10)
length(x)
[연습문제 6] R의 package 중에 Usingr 패키지의 데이터 이용
install.packages("UsingR")
library(UsingR)
# 데이터 불러들이기 - 1부터 2003까지의 숫자 중 prime number를 가지고 있음
data("primes")
head(primes) # 앞에서부터 데이터 6개만 출력해줌
tail(primes) # 뒤에서 6개 출력 -> 데이터 확인용
[연습문제 7] 1부터 2003까지 숫자 중 prime number는 몇 개인가?
length(primes) # 총 304개
[연습문제 8] 1부터 200까지의 숫자 중 prime number는 몇 개인가?
length(primes[primes<=200])
sum(primes<201) #논리연산의 sum -> 개수!
[연습문제 9] 평균을 구해보자.
mean(primes)
[연습문제 10] 500이상 1000이하의 prime number만으로 구성된 vector p를 구하시오.
p <- primes[primes>=500&primes<=1000]
2. 다음과 같은 형태의 데이터를 이용하여 아래의 문제를 풀어보자.
1 5 9
2 6 10
3 7 11
4 8 12
[연습문제 11] 위의 데이터를 이용하여 matrix x를 구하시오.
x <- matrix(1:12,nrow=4)
[연습문제 12] 전치행렬 (transpose matrix)을 만들어보자.
t(x)
[연습문제 13] matrix x에 대해 첫번째 행만 추출해보자.
x[1,]
[연습문제 14] matrix x에 대해 6,7,10,11 뽑아보자.
x[2:3,-1]
[연습문제 15] matrix x에 대해 x의 두번째 열의 원소가 홀수인 행들만 뽑아서 matrix p를 생성하시오.
p = subset(x,x[,2]%%2!=0)
p = x[x[,2]%%2==1,]
3. 프로그래밍 - 비개발직군 시험문제
홀수개의 숫자로 구성된 숫자문자열이 입력으로 제공된다.
문자열의 개수는 7개 이상 11개 이하로 제한된다. (즉, 입력 문자열의 길이는 7,9,11개)
중앙 숫자를 기준으로 앞과 뒤의 숫자를 분리한 후 분리된 두 수를 거꾸로 뒤집어서 두 수의 차를 구하시오.
ex) 7648623 (7자)
-> 8을 기준으로 764,623 가운데를 기준으로 나눔
-> 467,326 각 숫자를 거꾸로 뒤집음
-> 141 (467-326)
ex) 7648620 (7자)
-> 8을 기준으로 764,620
-> 467,026 각 숫자를 거꾸로 뒤집음
-> 141 (467-26)
install.packages("stringr")
library(stringr)
##방법 1
input = "7648623"
myFun = function(input){
num = str_length(input) #숫자 길이
mid = (num+1)/2 #기준숫자 위치
sub1 = str_sub(input,1,mid-1) #앞 문자열
sub2 = str_sub(input,mid+1,num) #뒤 문자열
if(str_sub(sub1[[1]],(mid-1),(mid-1))!=0 & str_sub(sub2,(mid-1),1)!=0){
sub1 <- str_split(sub1,"")
sub2 <- str_split(sub2,"")
x = sub1[[1]][mid-1]; y = sub2[[1]][mid-1]
for(i in seq((mid-2):1)){
x = paste(x,sub1[[1]][i])
y = paste(y,sub2[[1]][i])
i=i-1
}
}else{ # 0인경우
}
}
## 방법 2
input = "7648623"
myFun = function(input){
num = str_length(input) #숫자 길이
mid = (num+1)/2 #기준숫자 위치
sub1 = str_sub(input,1,mid-1) #앞 문자열
sub2 = str_sub(input,mid+1,num) #뒤 문자열
if(str_sub(sub1,(mid-1),(mid-1))==0) { # 끝 문자가 0일 경우
sub1 <- str_split(sub1,"")
str_sub(sub1[[1]],(mid-1),(mid-1))=""
}else if(str_sub(sub2,(mid-1),(mid-1))==0){
sub2 <- str_split(sub2,"")
str_sub(sub2,(mid-1),(mid-1))=""
}
sub1 <- str_split(sub1,"")
sub2 <- str_split(sub2,"")
x = sub1[[1]][mid-1]; y = sub2[[1]][mid-1]
for(i in seq((mid-2):1)){
x = paste(x,sub1[[1]][i],sep="")
y = paste(y,sub2[[1]][i],sep="")
i=i-1
}
x <- as.numeric(x)
y <- as.numeric(y)
result = abs(x-y)
return(result)
}
'R > 1. R 기초' 카테고리의 다른 글
데이터 입출력 - txt, csv, xml, json, excel (0) | 2020.01.09 |
---|---|
String - stringr 패키지를 이용한 문자열 처리 (0) | 2020.01.08 |
Data Structure 2 - list, data frame, factor (0) | 2020.01.08 |
Data Structure 1 - vector, matrix, array (0) | 2020.01.07 |
Package (0) | 2020.01.06 |