반복문
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 |