본문 바로가기
기본적인프로그래밍/R

[R] 쉽게 배우는 R programming 기초 (4) (if문, for문, while문)

by 인포메틱스 2020. 6. 25.
반응형

이번시간에는 저번이 이야기했들이 for문과 while 문에 대해서 이야기 해보도록 하겠습니다.

 

for,while문을 하면서 꼭 필요한것인 if문도 추가로 설명해보겠습니다.

 

컴퓨터를 사용하는 이유중 하나고 엑셀말고 R을 이용하라고 하는 이유중 하나입니다.

 


1. if 문

if 문은 관문이라고 생각하시면 됩니다. "~라면" 저는 참깨라면이 좋습니다.

 

 공항에 비행기를 타고갈때, 게이트에서 승무원이 표검사를 하는 것을 생각하시면 될 것 같습니다.

 

 

if(조건문)이 맞다면 조건문 안에 있는 내용이 실행이 됩니다.

> a=1
> if(a==1){
+   print('d')
+ }
[1] "d"
> a=1
> if(a==1){
+   print('d')
+ }
[1] "d"
> a=0
> if(a==1){
+   print('d')
+ }
> 

 

조건이 여러개일 경우? if를 여러개 쓴다? 아니죠 else라는 것이 있습니다.

 

 else는 if내의 조건문이 맞지 않을때, 사용되는 문법입니다.

 

> a=1
> if(a==0){
+   print('right')
+ }else{'wrong'}
[1] "wrong"
>

 

else뒤에는 if문도 추가로 사용 가능합니다.

 

> a=1
> if(a==0){
+   print('right')
+ }else if(a==1){
+   print('right')
+ }else{
+   print('wrong')
+ }
[1] "right"
>

 

* == 용법은 같다! 라는 뜻입니다. 추후에 설명하겠습니다.

2. for문

컴퓨터 언어를 이용하면 꼭 알아야할 문법중 하나입니다!

 

필수적으로 사용되기 때문이죠!

 

 우리가 일반적으로 반복되는 일을 줄이기 위해서는 이와 같은 for문을 이용하면됩니다.

 

for문의 기본적인 사용법은 다음과 같습니다.

> a=c(1,2,3,4,5,5)
> for(i in a){
+   print(i)
+ }
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 5
>
> a=c('a','b','d','e','a')
> for(i in a){
+   print(i)
+ }
[1] "a"
[1] "b"
[1] "d"
[1] "e"
[1] "a"
>

for문에 들어가는 벡터의 개수를 횟수로 생각하시면 됩니다.

> a=c(1,2,3,4,5)
> b=1
> for(i in a){
+   b=b+1
+   print(b)
+ }
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
>
> a=c('a','b','d','e','a')
> b=1
> for(i in a){
+   b=b+1
+   print(b)
+ }
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
>

혹은 for문에 들어간 숫자를 이용하여 사칙연산도 가능하고, 문자를 추가할 수도 있습니다.

> a<-c(1,3,5,7,9)
> b=1
> for(i in a){
+   b=b+i
+   print(b)
+ }
[1] 2
[1] 5
[1] 10
[1] 17
[1] 26
>
> a<-c('e','l','l','o',' ','w','o','r','l','d')
> b=c('H')
> for(i in a){
+   b<-append(b,i)
+   print(b)
+ }
[1] "H" "e"
[1] "H" "e" "l"
[1] "H" "e" "l" "l"
[1] "H" "e" "l" "l" "o"
[1] "H" "e" "l" "l" "o" " "
[1] "H" "e" "l" "l" "o" " " "w"
[1] "H" "e" "l" "l" "o" " " "w" "o"
[1] "H" "e" "l" "l" "o" " " "w" "o" "r"
 [1] "H" "e" "l" "l" "o" " " "w" "o" "r" "l"
 [1] "H" "e" "l" "l" "o" " " "w" "o" "r" "l" "d"
> print(paste0(b,collapse = ''))
[1] "Hello world"
>

*append, paste0은??

append의 경우 벡터에 원하는 값들을 추가할때 이용합니다.

paste0의 경우 여러  벡터들을 하나로 합칠 때 이용합니다. (추후 다시 설명하겠습니다.)

 

심화 과정!!

저번에 배웠던 list와 연관시켜서 한층더 심화 과정을 알아보도록 하겠습니다.

 

저번에 list를 python에 dict과 비슷하게 사용한다고 이야기했는데요.

 

dict은! key:value가 있는 값들로서 key만 이용하면  value를 바로 얻을수 있는 장점이 있죠.

 

그래서 주로 어떻게 사용하느냐?!

 

> a=list('a'=1,'b'=2,'c'=3,'d'=5,'e'=7)
> b=1
> for(i in names(a)){
+   b=b+a[[i]]
+   print(b)
+ }
[1] 2
[1] 4
[1] 7
[1] 12
[1] 19
>

 

list안에 여러 벡터들 값이 있을 경우는?

 

> a=list('a'=c(1,3,5),'b'=c(2,5,3),'c'=c(3,7,4),'d'=c(5,2,4),'e'=c(7,3,1))
> b=1
> for(i in names(a)){
+   b=b+a[[i]]
+   print(b)
+ }
[1] 2 4 6
[1] 4 9 9
[1]  7 16 13
[1] 12 18 17
[1] 19 21 18
>

 

다음과 같이 여러 벡터마다 값을 더할 수가 있습니다.

 

for문 안에 for문이 가능합니다.!

 

> a=list('a'=c(1,3,5),'b'=c(2,5,3),'c'=c(3,7,4),'d'=c(5,2,4),'e'=c(7,3,1))
> b=1
> for(i in names(a)){
+   for(l in a[[i]]){
+   b=b+l
+   print(b)
+   }
+ }
[1] 2
[1] 5
[1] 10
[1] 12
[1] 17
[1] 20
[1] 23
[1] 30
[1] 34
[1] 39
[1] 41
[1] 45
[1] 52
[1] 55
[1] 56
>

 

활용!

다음과 같은 데이터가 있습니다.

> a=data.frame(person=c('Jin','RM','Suga','J-Hope','Jimin','Jungkook','V','manager'),ticket=c(1,0,1,1,0,0,1,1))
> a
    person ticket
1      Jin      1
2       RM      0
3     Suga      1
4   J-Hope      1
5    Jimin      0
6 Jungkook      0
7        V      1
8  manager      1

 

비행기 티켓팅을 하는데 승무원이 되봅시다. (1=있다, 0=없다) 비행기를 탈수있는 사람은?

 

> r<-c()
> for(i in 1:nrow(a)){
+   if(a$ticket[i]==1){
+     r<-c(r,i)
+   }
+ }
> a[r,]
   person ticket
1     Jin      1
3    Suga      1
4  J-Hope      1
7       V      1
8 manager      1
> 

 

3. while문

 

while문은 for문을 사용하고, 잘 사용하지 않는 문법이긴한데(개인적으로), 필요하긴합니다. 특수 케이스!

 

반복적인 일을 하는것 이외에도 while의 사용법은 조건에 맞으면 반복분을 멈추는 것입니다.

 

> a=1
> b=1
> while(a==1){
+   print('d')
+   b=b+1
+   if(b==5){
+     a=2
+   }
+ }
[1] "d"
[1] "d"
[1] "d"
[1] "d"
>

 

if 영어로 "~라면" 이죠?

 

해석하면 b가 5라면! a=2로 해라 이렇게 생각하시면 됩니다.

 

a가 2가 되면 당연히 while내부에 a==(같다)1인 것을 틀리게 하는 것이기 때문에 멈추게 되는 것이죠.

 


 

이렇게  for문,while문을 배워 보았습니다. 지루하더라도 꼭 한번 해보세요! 기본적인 특성을 알고 있어야지 응용도 가능합니다!

 

오늘 포스팅하면서 또 생각한 것이 가르치는 순서를 잘짜야겠다는 생각이 드네요.

 

while문하면서 if문 필요하고, if문 하면  else, ifelse도 설명해야하고 참 힘드네요

728x90
반응형

댓글