091
[R] 기초문법(조건문, 반복문, 함수) 본문
1. 조건문 & 반복문
- if-else & ifelse
score <- 85
if(score > 90){
grade <- "A"
} else if(score > 80){
grade <- "B"
} else {
grade <- "F"
}
print(grade) #[1] "B"
-> if-else if-else문은 다른 언어 기타 언어들과 거의 같은 사용법을 가지고 있습니다. 중요한 점은 else는 이전 if문의 }(닫는 괄호)와 같은 주에 있어야 error가 발생하지 않습니다. 그리고 만약 길이가 1이상의 논리값을 any(...), all(...)없이 집어넣는 경우, 첫번째 값만을 사용하게 됩니다.
job.type <- "B"
bonus <- 100
if(job.type=="A"){
bonus <- 200
}
print(bonus) #[1] 100
bonus <- ifelse(job.type=="A",200,100)
print(bonus) #[1] 100
-> ifelse문은 다른언어의 삼항 연산자와 거의 같은 사용법을 가지고 있습니다. ifelse는 벡터화가 가능하기 때문에 여러 값이 test값에 들어가도 전부 적용 가능합니다.
- for/while
for(i in 6:10){
print(i)
}
#[1] 6
#[1] 7
#[1] 8
#[1] 9
#[1] 10
for(i in 6:10){
cat(i)
}
#678910
for(i in 1:9){
cat("2 *",i,"=",2*i,"\n")
}
# 2 * 1 = 2
# 2 * 2 = 4
# 2 * 3 = 6
# 2 * 4 = 8
# 2 * 5 = 10
# 2 * 6 = 12
# 2 * 7 = 14
# 2 * 8 = 16
-> for(...)문은 변수 in 범위를 사용하여 내부적으로 일정 범위내에서 반복할 때 유용하게 사용됩니다. 내부 값을 출력할 때 print(...)와 cat(...)을 주로 사용하는데 둘의 차이는 cat은 개행을 하지 않고 문자열을 이어서 출력하고 개행이 필요 시에는 이스케이프 시퀀스 중에 개행을 의미하는 \n을 직접사용합니다. 그에 반해 print는 객체를 그대로 보여주며 자동으로 줄바꿈이 되지만 직접 작성할 시에는 적용되지 않습니다.
print("Hello\nWorld") #[1] "Hello\nWorld"
cat("Hello\nWorld")
#Hello
#World
sum <- 0
for(i in 1:10){
sum <- sum + i
if(i>=5) break
}
sum #[1] 15
sum <- 0
for(i in 1:10){
if(i%%2==0) next
sum <- sum + i
}
sum #[1] 25
-> break는 다른 언어에서도 사용되던 break와 동일한 기능을합니다. next의 경우, continue와 같은 기능을 하며 위의 경우 조건에 부합한 경우 다시 for문으로 복귀하기 때문에 저 for문의 결과는 홀수값들의 합이 됩니다.
sum <- 0
i <- 1
while(i<=5){
print(i)
i <- i+1
}
# [1] 1
# [1] 2
# [1] 3
# [1] 4
# [1] 5
for(i in 1:5){
for(j in 1:i){
cat('*')
}
cat('\n')
}
i <- 1
while(i<6){
j <- 1
while(j<=i){
cat("*")
j <- j+1
}
cat('\n')
i <- i +1
}
# *
# **
# ***
# ****
# *****
-> 두 반복문을 통해 아래와 같은 결과물이 인쇄되게 만든 로직입니다.
- apply()는 행렬과 데이터프레임의 가로(행)/세로(열) 계산을 하는 함수로, apply(데이터, 방향, 함수) 형식으로 사용됩니다.
apply(iris[,1:4],1,mean) #row
# [1] 2.550 2.375 2.350 2.350 2.550 2.850
# [7] 2.425 2.525 2.225 2.400 2.700 2.500...
apply(iris[,1:4],2,mean) #col
#Sepal.Length Sepal.Width Petal.Length Petal.Width
# 5.843333 3.057333 3.758000 1.199333
-> 방향이 1이라는 것은 행끼리의 합을 구하는 것이고, 방향이 2라는 것은 열끼리의 합을 구하는 것입니다.
2. 함수
-function(...)은 사용자 정의 함수를 만들 때 사용하는 키워드입니다.
mymax <- function(x,y){
result <- max(x,y)
return(result) #R은 가장 마지막 줄에 있는 실행 결과를 자동 반환하기 때문에 생략 가능
}
a <- mymax(20,15)
b <- mymax(31,45)
print(a+b) #[1] 65
weather = data.frame(
temp = c(28,33,25,31,27)
)
tempf <- function(temp){
for(i in temp){
result <- ifelse(i>=30,"더위",i)
cat(result," ")
}
}
tempf(weather$temp) #28 더위 25 더위 27
-> 특정 조건에서 특정값을 출력하고 싶을 때는 function과 for문을 같이 사용해주면 됩니다.
-which(...) 함수는 조건이 TRUE인 데이터 값을 가져오는 것이 아니라, 위치(인덱스 번호)를 반환합니다. which.max(...), which.min(...)은 각각 해당 자료의 최댓값, 최솟값의 위치인 인덱스값을 반환합니다.
score <- c(76,84,69,50,95,60,82,71,88,84)
score # [1] 76 84 69 50 95 60 82 71 88 84
which.max(score) #[1] 5
score[which.max(score)] #[1] 95
which.min(score) #[1] 4
score[which.min(score)] #[1] 50
idx <- which(score<=60)
idx #[1] 4 6
score[idx] <- 61
score # [1] 76 84 69 61 95 61 82 71 88 84
which(score>95) #integer(0)
score[which(score>95)] #numeric(0)
-> 해당 값에 해당하는 내용을출력하고 싶으면 추출할 수 있는 대괄호를 사용하면 됩니다. 없는 which에 접근하려고 할 때는 integer(0)이 출력됩니다.
name <- c('ss','aa','dd')
which(name=='aa') #[1] 2
which(name=='sss') #integer(0)
name[which(name=='sss')] #character(0)
'Programming Language > R' 카테고리의 다른 글
| [R] 데이터 전처리 (0) | 2026.04.26 |
|---|---|
| [R] 단일&다중변수자료의 탐색 (0) | 2026.04.25 |
| [R] 파일 데이터 읽기/쓰기 (0) | 2026.04.06 |
| [R] 자료구조(3): 매트릭스(Matrix) & 데이터프레임(Dataframe) (0) | 2026.04.01 |
| [R] 자료구조(2): 리스트(List) & 팩터(Factor) (0) | 2026.04.01 |
