if~else문: 조건에 따라 둘 중 하나의 값 또는 변수를 선택할 때 사용
if(비교조건){
조건이 참일 떄 실행할 명령문(들)
}else{
조건이 거짓일 떄 실행할 명령문(들)
}
#기초코드 1
job.type <- 'A'
if(job.type=='B'){
bonus <- 200 #직무 유형이 B일떄 실행
} else{ #else는 if문의 코드블록이 끝나는 부분에 있는 }와 같은 줄에 작성해야됨
bonus <- 100#직무 유형이 B가 아닌 나머지 경우 실행
}
print(bonus)
for문
for(반복 변수 in 반복 범위){
반복할 명령문(들)
}
#기초코드3
for(i in 1:5){
print('*')
}
for(i in 1:5){
cat('*')#\n은 개행
}
while문: 어떤 조건이 만족하는 동안 코드블록을 수행하고, 해당 조건이 거짓일 경우 반복을 종료하는 명령문
while(비교 조건){
반복할 명령문(들)
}
#기초코드4
sum <- 0
i <-
while(i<=5){
print(i)#i값이 계속1
}
break: for문 밖으로 이동
#기초코드5
for(i in 1:5){
if(i>=2)break #for문밖으로 이동
print(i)
}
next:특정 조건을 건너뛰고 반복
for(i in 1:10){
if(i%%2==0)next #짝수면 skip해서 for 문으로 이동
print(i)
}
apply()함수
- 반복 작업이 필요한 경우에는 반복문 적용
- 반복 작업의 대상이 매트릭스나 데이터프레임의 행, 또는 열인 경우는 for문이나 while대신 apply()함수 이용 가능
apply(데이터셋, 행/열방향 지정, 적용 함수)

mapply = matrix(1:6, nrow=2, ncol=3)
mapply
# 출력 결과:
# [,1] [,2] [,3]
# [1,] 1 3 5
# [2,] 2 4 6
apply(mapply, 1, max) # row 방향으로 함수(최댓값) 적용
# 출력 결과:
# [1] 2 4 6
apply(mapply, 2, max) # col 방향으로 함수(최댓값) 적용
# 출력 결과:
# [1] 2 4 6
사용자 정의 함수 만들기
-R은 사용자들도 자신만의 함수를 만들어 사용할 수 있는 기능 제공
함수명<-function(매개변수 목록){
실행할 명령문(들)
return(함수의 실행 결과)
}
mymax <- function(x, y) { # x와 y를 입력으로 받는 mymax라는 함수를 정의
num.max <- x # num.max에 x 값을 초기화
if (y > x) { # y가 x보다 큰지 확인
num.max <- y # y가 더 크면 num.max를 y로 변경
}
return(num.max) # num.max 값을 반환
}
mymax(2, 3) # mymax 함수를 호출하여 2와 3을 인자로 전달
# 출력 결과:
# [1] 3 # 3이 반환됨
조건에 맞는 데이터의 위치 찾기
-데이터 분석을 하다보면 자신이 원하는 데이터가 벡터나 매트릭스, 데이터 프레임 안에서 어디에 위치하고 있는지를 알기 원하는 때가 있음,
-예를 들어 50명의 학생 성적이 저장된 벡터가 있는데 가장 성적이 좋은 학생은 몇번쨰에 있는지 알고 싶은 경우
이런경우 편리하게 사용할 수 있는 함수: which(), which.max(), which.min()함수
score <- c(71, 88, 84) # 성적 벡터 생성
which(score == 88) # 성적이 88인 학생은 몇 번째에 있나
# 출력 결과:
# [1] 2 # 88은 2번째 학생
which(score >= 70) # 성적이 70 이상인 학생은 몇 번째에 있나
# 출력 결과:
# [1] 1 2 3 # 70 이상인 학생은 1, 2, 3번째
which.max(score) # 최고 점수는 몇 번째에 있나
# 출력 결과:
# [1] 2 # 최고 점수는 88로 2번째 학생
which.min(score) # 최저 점수는 몇 번째에 있나
# 출력 결과:
# [1] 1 # 최저 점수는 71로 1번째 학생
종합문제
#문제 1: 성별에 따른 문자열 할당
gender.type <- 'M' # 성별을 'M'으로 설정
if (gender.type == 'F') { # 성별이 'F'인지 확인
g <- '여성' # 여성일 경우 g에 '여성' 할당
} else { # 그렇지 않으면
g <- '남성' # g에 '남성' 할당
}
print(g) # g 출력
# 출력 결과:
# [1] "남성"
#문제 2: ifelse를 이용한 성별 할당
gender.type <- 'M' # 성별을 'M'으로 설정
g <- ifelse(gender.type == 'F', '여성', '남성') # 성별에 따라 g에 값 할당
print(g) # g 출력
# 출력 결과:
# [1] "남성"
#문제 3: 별 찍기 패턴 (for문)
for(i in 1:5) { # 1부터 5까지 반복
for(j in 1:i) { # i에 따라 j를 1부터 i까지 반복
cat('*') # '*' 출력
}
cat('\n') # 줄바꿈
}
# 출력 결과:
# *
# **
# ***
# ****
# *****
#문제 4: 별 찍기 패턴 (while문)
i <- 1 # i를 1로 초기화
while(i <= 5) { # i가 5 이하일 때까지 반복
j <- 1 # j를 1로 초기화
while (j <= i) { # j가 i 이하일 때까지 반복
cat('*') # '*' 출력
j <- j + 1 # j 증가
}
cat('\n') # 줄바꿈
i <- i + 1 # i 증가
}
# 출력 결과:
# *
# **
# ***
# ****
# *****
#문제 5: 반복문에서 break와 next 사용
for(i in 1:5){ # 1부터 5까지 반복
if(i %% 4 == 0) break # i가 4의 배수일 때 반복 종료
print(i) # i 출력
}
# 출력 결과:
# [1] 1
# [1] 2
# [1] 3
for(i in 1:10){ # 1부터 10까지 반복
if(i %% 3 != 0) next # i가 3의 배수가 아닐 경우 다음 반복으로
print(i) # i 출력
}
# 출력 결과:
# [1] 3
# [1] 6
# [1] 9
#문제 6: 데이터프레임의 열 합계 계산
msleep = data.frame(study = c(1, 2, 3), sleeping = c(7, 8, 9)) # 데이터프레임 생성
msleep
# 출력 결과:
# study sleeping
# 1 1 7
# 2 2 8
# 3 3 9
apply(msleep, 2, sum) # 각 열의 합 계산
# 출력 결과:
# study sleeping
# 6 24
#문제 7: 함수 정의와 호출
namef <- function(name1) { # name1을 인자로 받는 함수 정의
for(i in 1:5) { # 1부터 5까지 반복
print(name1) # name1 출력
}
}
namef('kdh') # 'kdh'를 인자로 함수 호출
# 출력 결과:
# [1] "kdh"
# [1] "kdh"
# [1] "kdh"
# [1] "kdh"
# [1] "kdh"
#문제 8: 벡터의 특정 값 위치 찾기
value1 <- c(100, 200, 300) # 값 벡터 생성
which(value1 == 300) # 300의 위치 찾기
# 출력 결과:
# [1] 3
which.max(value1) # 최대값의 위치 찾기
# 출력 결과:
# [1] 3
which.min(value1) # 최소값의 위치 찾기
# 출력 결과:
# [1] 1
#문제 9: 구구단 9단 출력
for(i in 1:9){ # 1부터 9까지 반복
cat('9*', i, '=', 9 * i, '\n') # 구구단 9단 출력
}
# 출력 결과:
# 9* 1 = 9
# 9* 2 = 18
# 9* 3 = 27
# 9* 4 = 36
# 9* 5 = 45
# 9* 6 = 54
# 9* 7 = 63
# 9* 8 = 72
# 9* 9 = 81
#문제 10: 구구단 8단 출력
i <- 1 # i를 1로 초기화
while(i < 10) { # i가 10 미만일 때 반복
cat('8*', i, '=', 8 * i, '\n') # 구구단 8단 출력
i <- i + 1 # i 증가
}
# 출력 결과:
# 8* 1 = 8
# 8* 2 = 16
# 8* 3 = 24
# 8* 4 = 32
# 8* 5 = 40
# 8* 6 = 48
# 8* 7 = 56
# 8* 8 = 64
# 8* 9 = 72
#문제 11: 1부터 100까지 반복하며 3의 배수 출력
for(i in 1:100){ # 1부터 100까지 반복
result <- ifelse(i %% 3 == 0, '*', i) # i가 3의 배수면 '*'로, 아니면 i로 설정
cat(result, '') # 결과 출력
}
# 출력 결과:
# 1 2 * 4 5 * 7 8 * 10 11 * 13 14 * ... (3의 배수는 '*'로 출력)
'R' 카테고리의 다른 글
벡터&매트리스&데이터프레임 (0) | 2025.03.27 |
---|---|
R의 기본연산/ 변수/ 벡터의 이해 (0) | 2025.03.08 |