이번시간에는 저번이 이야기했들이 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도 설명해야하고 참 힘드네요
'기본적인프로그래밍 > R' 카테고리의 다른 글
[R] 쉽게 배우는 R programming 기초 (6) (plot 저장, 크기 조절) (3) | 2020.07.14 |
---|---|
[R] 쉽게 배우는 R programming 기초 (5) (그래프, plot, 기타 parameter) (0) | 2020.06.30 |
[R] 쉽게 배우는 R programming 기초 (3) (list, array) (0) | 2020.06.24 |
[R] 쉽게 배우는 R programming 기초 (2) (data.frame, factor) (0) | 2020.06.23 |
[R] 쉽게 배우는 R programming 기초 (1) (vector, matric) (0) | 2020.06.22 |
댓글