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

+ Recent posts