목차
조건문
프로그램을 실행하는 도중에 만족하는 조건에 따라 코드를 분기할 때 사용하는 구문이다.
조건을 만족하는지에 따라 실행하는 코드를 다르게 설정할 수 있다. 반복문안에 조건문을 사용하여 조건문을 제어할 수 있다.
if(조건){
#실행 코드
} else if (조건) {
#실행 코드
} else{
#실행 코드
}
ifelse() 함수
데이터를 전처리하여 분기할 때 사용한다. test, yse, no 라는 매개변수가 있다. test는 true/false 반환하는 조건을 지정한다.
ifelse(test=TRUE/FALSE로 반환되는 코드,
yes = test가 참일 때 반환하는 값,
no = test가 거짓일 때 반환하는 값)
score<-seq(from=40, to=100,by=100)
ifelse(test = score >= 70, yes='합격', no='불합격')
반복문
어떠한 코드에서 일부의 값을 바꿔가면서 반복하여 실행할때 사용한다.
score<-seq(from=40, to=100, by=100) 과 같이 이전에 우리가 사용한 리스트 생성하는 코드 또한 내부에서는 반복문이 실행되며 값을 만들어내는 것이다.
반복문에는 for 문, while 문, repeat이 있다.
for (변수 in 벡터) {
#실행 코드
}
while(조건) {
#실행 코드
}
repeat {
#실행코드
if(조건){
break
}
}
R언어의 print는 두개 이상의 문자를 결합하는 기능이 없다는 것을 참고하자.
두 개 이상의 문자를 결합하기 위해서는 cat을 사용한다.
#반복문
menu <- c('짜장면','탕수육','깐풍기','짬뽕')
for( item in menu){
print(x=item)
}
menu <- c('짜장면','탕수육','깐풍기','짬뽕')
for(item in menu){
print(item, " want?\n")
# print는 두개 이상의 문자열을 결합하는 기능이 없어 에러가 발생한다.
}
for(item in menu){
cat(item," want?\n")
}
paste() : 문자열 연결
for(item in menu){
text <- paste(item, "want?\n")
print(x=text)
}
while문
i<-5
while(i>0){
print(x=i)
i<-i-1
}
next : 코드 건너뛰기
next 문을 만나면 이후 코드를 실행하지 않고 반복문의 처음으로 들어간다.
java에서는 continue 와 같이 동작한다.
for(item in menu){
if(item %in% c('짜장면','짬뽕')){
next
#next로 인해 실행되지 않는다.
cat(item,' food\n',sep='?')
} else{
cat(item, 'next? \n',sep='?')
}
}
break : 반복문 탈출하기
i<-0
while(TRUE){
print(x=i)
i<-i+1
if(i>5){
break
}
}
사용자 정의 함수
사용자 정의 함수는 사용자가 직접 정의한 함수를 의미한다. 이를 통해 코드를 이해하기 쉽고 재사용성을 높일 수 있다.
또한, 코드의 유지보수를 쉽게 해준다.
function(a, b){
#실행코드
return (c)
}
Pythagoras <- function(a,b){
c<- sqrt(x=a^2 + b^2)
return (c)
}
Pythagoras(a=3, b=4)
#사용자 정의 함수 생성
getGrade <- function(score){
if(score >= 90){
grade <- 'A'
} else if(score >= 80){
grade <- 'B'
} else if(score >= 70){
grade <- 'C'
} else if(score >= 60){
grade <- 'D'
}else{
grade <- 'F'
}
return (grade)
}
getGrade(score=100)
파일로 저장하여 사용자 함수 재사용
R 파일로 사용자 정의 함수를 저장하여 재사용 할 수 있다.
source(file='경로명/파일명.R', encoding='UTF-8', ...)
##정의한 함수 삭제
rm(getGrade)
source(file='경로/myFuncs.R', encoding='UTF-8')
getGrade(score=100)
인수의 기본값 설정
사용자 정의 함수의 매개변수에 전달되는 인수의 기본값을 설정할 수 있다.
#기본값 설정
guessHeight <- function(name='홍길동',height=173){
answer <- paste(name,' 님의 키는 ',height,'cm 입니다.')
return(answer)
}
guessHeight()
guessHeight(name='정우성',height=186)
함수 반복
이전에는 특정 변수를 넣어 반복하였다. 하지만 이번에는 같은 함수를 반복 실행하는 apply() 함수를 사용해보자
apply()
벡터를 넣어 반복 실행하는 함수이다. 행렬의 행 또는 열 방향으로 같은 함수를 반복 실행하는 함수이다. 이 함수를 사용하기 위해서는 행렬에 대해 이해하고 있어야한다.
MARGIN을 지정하여 해당 함수를 1(행방향), 2(열방향)으로 원소를 선택할 수 있다.
R언어는 대소문자를 구분한다는 것을 잊지말자.
apply(x=객체명, MARGIN=1 또는 2, FUN=함수)
#str() 함수로 행렬 데이터 출력
#iris는 생물 학자가 다중 측점 사용을 소개한 다변량 데이터 셋이다.
# 붓꽃 품종에 대해 길이와 너비를 측정한 값이다.
str(object =iris)
# head(), tail() 함수를 통해 객체의 일부만 출력할 수 있다,.
# 두 함수의 출력 기본 line 수는 6이다.
#as.matrix(x=객체명) 을 통해 R 객체를 행렬로 변환 할 수 있다.
irisMat1 <- as.matrix(x=iris)
head(x=irisMat1)
tail(x=irisMat1, n=3)
irisMat2 <- as.matrix(x=iris[,1:4])
head(x=irisMat2)
#apply()
apply(X = iris[,1:4], MARGIN = 1, FUN = mean)
for 문과의 비교
apply() 함수로는 한줄로 진행할 수 있는 코드가 for 문으로는 5줄이 필요한다.
apply로 코드의 간결성, for 문에 사용한 인덱스 변수(i) 생성과 같은 불필요한 변수 선언 등에서 강점을 가지고있다.
avg <- c()
for(i in 1:150){
row <- iris[i,1:4]
row <- as.numeric(x=row)
avg[i] <- mean(x=row)
}
lapply(), sapply()
벡터, 리스트, 데이터 프레임의 원소를 지정된 함수에 넣어 반복 실행하는 함수이다.
apply함수와 다르게 MARGIN 매개변수가 없다. lapply()는 항상 리스트를 반환하고, sapply()는 벡터/행렬을 반환한다.
sapply는 apply()함수의 MARIN에 2를 지정하여 실행한 것과 같다.
#lapply
lapply(X=univ, FUN=mean)
#sapply
sapply(X = univ, FUN = mean)
sapply(X = univ, FUN = mean, simplify = FALSE)
참고
나성호의 R 데이터 분석 입문 도서
https://github.com/HelloDataScience/DAwR
'Programming Language > etc' 카테고리의 다른 글
ISO 8601, 세계협정시(UTC) (0) | 2022.10.06 |
---|---|
[R.입문] R 자료구조 - 리스트와 데이터프레임 (0) | 2021.10.06 |
[R.입문] R 자료구조 - 벡터(vector) (0) | 2021.10.05 |
[R.입문] 실습 환경 구축 for windows (0) | 2021.10.05 |