본문 바로가기

R

[R] 반복문 - for, while, repeat

반복문

1. for문

for(카운터변수 in 반복수행할 데이터변수){

반복수행할 문장

}

반복문 함수

next

: 현재 수행중인 반복문을 중지하고

다음 반복문으로 넘어가는 함수

for(i in 1:10){

if(i==3|i==5){

next

} else{

print(i) }

}

break

: 반복문 종료

for(i in 1:10){

if(i==3|i==5){

break

} else{

print(i)

}

}

 

(+)

print('2 * ',1,' = ',2) : 콤마로 구분이 되어있는 각각의 값들을 출력할 수 없다.

print(paste('2 * ',1,' = ',2)) : 콤마로 구분되어있는 부분을 paste를 이용해서 하나로 붙여서 출력

cat('2 * ',1,' = ',2) : 콤마로 구분되어있는 각각의 값들을 출력할 수 있다.

‘\n’ 개행문자 다음줄 역할

‘\t’ 줄단위로 띄어쓰기


[문제81] 1부터 10까지 합을 for문을 이용해서 구하세요.

더보기
hap <- 0
for(i in 1:10){
hap <- hap+i
}

⇒ sum(1:10)

[문제82] 1부터100까지 전체합, 짝수합, 홀수합을 출력해주세요.

더보기
total <- 0
even <- 0
odd <- 0
①
for(i in 1:100){
total <- total+i
if(i%%2==0){
even <- even+i
} else {
odd <- odd+i
}
}
②
for(i in 1:100){
total <- total+i
ifelse(i%%2==0,even<-even+i,odd<-odd+i)
}

[문제83] 1부터100까지 홀수만 x변수에 입력해주세요.단 for문을 이용하세요.

더보기
x <- NULL
y <- NULL
for(i in 1:100){
if(i %% 2 != 0){
x <- c(x,i)
y <- append(y,i)
}
}

⇒ seq(1,100,2)

[문제84] 1부터 10까지 까지 출력하세요. 단 3,5는 제외하세요.

더보기
①
j<-0
for(i in 1:10){
if(i != 3 & i != 5){
j <- j+i
}}
②
for(i in 1:10){
if(i==3|i==5){
next
} else{
print(i)
}}
③
for(i in 1:10){
if(i==3|i==5){
break
} else{
print(i)
}}

[문제85] 2단을 출력해주세요.

더보기
①
for(i in 1:9){
print(paste('2 * ',i,' = ',i*2))
}
paste('2 * ',1:9,' = ',2*1:9)
②
for(i in 1:9){
cat('2 * ',i,' = ',2*i,'\n') 
}

[문제86] 구구단(2~9)을 출력해주세요.

더보기
①
for(i in 2:9){
for(j in 1:9){
print(paste(i,' * ',j,' = ',i*j))
}
}
②
for(i in 2:9){
for(j in 1:9){
cat(i,' * ',j,' = ',i*j,'\n')
}
}
③
for(i in 2:9){
for(j in 1:9){
cat(i,' * ',j,' = ',i*j,'**\t'**) #‘\t’  줄단위로 띄어쓰기
}
cat('\n')
}

[문제87] 구구단(2~9)을 화면과 같이 출력해주세요.

2 * 1 = 2 3 * 1 = 3 4 * 1 = 4 5 * 1 = 5 6 * 1 = 6 7 * 1 = 7 8 * 1 = 8 9 * 1 = 9

2 * 2 = 4 3 * 2 = 6 4 * 2 = 8 5 * 2 = 10 6 * 2 = 12 7 * 2 = 14 8 * 2 = 16 9 * 2 = 18

...

더보기
i <- 1
while(i <= 9){
cat('2 * ',i,' = ',2*i,'\n')
i <- i+1
}

2. while문

: 조건이 TRUE인 동안 반복수행하고 조건이 FALSE면 반복문을 종료한다.

while(조건){

반복수행할 문장

}


[문제88] while문을 이용해서 2단을 출력해주세요.

더보기
i <- 1
while(i <= 9){
cat('2 * ',i,' = ',2*i,'\n')
i <- i+1
}

[문제89] while문을 이용해서 구구단(2~9)을 출력해주세요.

더보기
i<-2
while(i <= 9){
j <- 1
while(j <=9){
cat(i,' * ',j,' = ',i*j,'\n')
j <- j+1
}
i <- i+1
}

[문제90] 구구단(2~9)을 화면과 같이 출력해주세요.

2 * 1 = 2 3 * 1 = 3 4 * 1 = 4 5 * 1 = 5 6 * 1 = 6 7 * 1 = 7 8 * 1 = 8 9 * 1 = 9

2 * 2 = 4 3 * 2 = 6 4 * 2 = 8 5 * 2 = 10 6 * 2 = 12 7 * 2 = 14 8 * 2 = 16 9 * 2 = 18

...

더보기
i<-2
while(i <= 9){
j <- 2
while(j <=9){
cat(j,' * ',i,' = ',i*j,'\t')
j <- j+1
}
i <- i+1
cat('\n')
}

3. repeat

: 조건이 없는 상태에서 반복

repeat{

반복수행할 문장

break

}

⇒ break와 i ←i+1 사용해서 계속 반복되지 않도록 하기


[문제91] repeat문을 이용해서 2단을 출력해주세요.

더보기
i<-1
repeat{
if(i > 9 ){
break
}
cat('2 * ',i,' = ',2*i,'\n')
i <- i+1
}

[문제92] repeat문을 이용해서 구구단(2~9)을 출력해주세요. 

더보기
i <- 2
repeat{
if(i==10){
break
}
j <- 1
repeat{
if(j==10){
break
}
cat(i,' * ',j,' = ',j*i,'\n')
j <- j+1
}
i <- i+1
}

[문제93] 구구단(2~9)을 화면과 같이 출력해주세요.

2 * 1 = 2 3 * 1 = 3 4 * 1 = 4 5 * 1 = 5 6 * 1 = 6 7 * 1 = 7 8 * 1 = 8 9 * 1 = 9

2 * 2 = 4 3 * 2 = 6 4 * 2 = 8 5 * 2 = 10 6 * 2 = 12 7 * 2 = 14 8 * 2 = 16 9 * 2 = 18

...

더보기
i <- 1
repeat{
if(i==10){
break
}
j <- 2
repeat{
if(j==10){
break
}
cat(j,' * ',i,' = ',j*i,'\t')
j <- j+1
}
cat('\n')
i <- i+1
}

[문제94] 구구단을 data frame에 저장해주세요. 단, 각각 단이 컬럼으로 구성되도록 해주세요.

더보기

원리)
    m<-NULL
    temp <- NULL
    temp <- c(temp,paste('2 * ',1,' = ',2*1))
    temp <- c(temp,paste('2 * ',2,' = ',2*2))
    temp
    m <- cbind(m,temp)
    
    temp <- NULL
    temp <- c(temp,paste('3 * ',1,' = ',3*1))
    temp <- c(temp,paste('3 * ',2,' = ',3*2))
    m<-cbind(m,temp)
⇒ 이런식으로 해야함.

풀이)

m <- NULL
for(i in 2:9){
temp <- NULL
for(j in 1:9){
temp<-c(temp,paste(i,' * ',j,' = ',i*j))
}
m <- cbind(m,temp)
}
gugudan <- data.frame(m)

n<-NULL
for(i in 2:9){
n <- c(n,paste0(i,'단'))
}   
names(gugudan) <- n
gugudan

열단위로 구구단 합치기)

df <- data.frame()
for(i in 2:9){
temp <- NULL
for(j in 1:9){
temp <- c(temp,paste(i,' * ',j,' = ',i*j))
}
df <- cbind(df,temp) #오류
}
    
df <- data.frame(matrix(NA,nrow=9,ncol=8))
for(i in 2:9){
temp <- NULL
for(j in 1:9){
temp <- c(temp,paste(i,' * ',j,' = ',i*j))
}
df[,i-1] <- temp
}
df

[문제95] 아래 화면과 같이 출력해주세요.
  name       sal                      star
  King      24000 ************************
  Kochhar   17000        *****************
  De Haan   17000        *****************
  Hunold     9000                *********
  Ernst      6000                   ******
  Austin     4800                     ****
  Pataballa  4800                     ****
  ......

더보기
num <- trunc(employees$SALARY/1000)
star<-NULL

for(i in num){
 v <- NULL
 for(j in 1:i){
   v <- paste0(v,'*')
  }
  star<-c(star,v)
}

df <- data.frame(name=employees$LAST_NAME,
                 sal=employees$SALARY,
                 star)
df[nchar(df$star) == num,]

x <- NULL
y <- NULL
for(i in 1:10){
  x <- paste0(x,'*')
  y <- c(y,'*')
}
x[1]
y[1]

#sal에 NA값이 있는 경우
idx <- 1
for(i in df$sal){
  if(is.na(i)){
    next
  } else{
  v <- NULL
  for(j in 1:trunc(i/1000)){
    v <- paste0(v,'*')
  }
  df[idx,'star']<- v
  idx <- idx+1
  }
}
df

'R' 카테고리의 다른 글

[R] merge  (0) 2022.01.17
[R] 함수, 중첩함수  (0) 2022.01.17
[R] 조건제어문 - if, ifelse, switch  (0) 2022.01.14
[R] apply, lapply, sapply, mpply, tapply  (0) 2022.01.14
[R] 그룹함수  (0) 2022.01.13
Recent Posts
Popular Posts
Recent Comments