티스토리 뷰
분석을 하면서 for loop을 안써봤다고 하면 거짓말이겠죠. 오늘은 for loop 을 사용면서 쉽게 간과했을법한 문제에 대해 포스팅해보려고 합니다. 바로 빈 벡터로 인한 문제입니다.
반복문을 사용하기위해 벡터를 입력해주었는데 이게 빈 벡터일 경우 우리가 생각치 못한 문제가 발생할 수 있습니다.
우선 다음의 벡터를 이용해 우리가 알고있는 반복문을 실행해보았습니다.
여러개의 요소가 들어있는 벡터x를 이용해서 벡터의 길이만큼 반복 실행을 하려고 한다면 쉽게 사용할 수 있는 방법이 for (i in seq(length(x)) 혹은 for(i in 1:length(x))입니다. 실제로 저도 이런 방식으로 많은 분석을 했었고요. 그리고 다음 예시와 같이 문제없이 실행이 됩니다.
> NotEmptyVector <- c('a','b','c')
> for (i in seq(length(NotEmptyVector))){
+ print(i)
+ }
[1] 1
[1] 2
[1] 3
> for (i in 1:length(NotEmptyVector)){
+ print(i)
+ }
[1] 1
[1] 2
[1] 3
하지만 이 벡터가 비어있다면 어떻게 될까요?
우리가 기대하는 바로는 for loop을 건너 뛰어야 겠죠? 반복 실행될 요소가 없을테니까요. 그럼 다음 두 잘못된 예시를 보겠습니다.
> EmptyVector <- NULL
> # wrong 1
> for (i in seq(length(EmptyVector))){
+ print(i)+ }
[1] 1
[1] 0
> # wrong 2
> for (i in 1:length(EmptyVector)){
+ print(i)+ }
[1] 1
[1] 0
위에서 실행했던 동일한 방법인데 비어있는 벡터임에도 불구하고 c(1,0)의 값이 반환이 된것을 볼 수 있습니다. 1부터 시작하는 벡터인데 그게 0번 까지 진행되니까 1,0이 반환되어버리는 대 참사가 일어나게 된것입니다.
이 문제는 for (i in seq(along=x)) 이 방법을 이용하면 해결 할 수 있습니다.
> # correct
> for (i in seq(along=EmptyVector)){
+ print(i)
+ }
아무런 결과도 반환하지 않은 것을 확인 할 수 있습니다.
앞으로 for loop을 사용할때 습관을 들이도록 해봅시다
'R' 카테고리의 다른 글
R | Clustering된 Heatmap 그리기, pheatmap, (3) | 2020.01.16 |
---|---|
R | 꼭 알아야할 RStudio기능, 스크립트 빠르게 수정하기, (Crtl + F) (1) | 2020.01.15 |
R | 알아두면 좋은 Rstudio 기능, 잘 정리된 스크립트를 짜는 방법, Crtl+Shift+R (0) | 2020.01.06 |
R | 반복 샘플 이름 리스트 만들기, seq() rep() paste() (0) | 2020.01.03 |
R | 데이터 정렬, sort()와 order()의 차이 (0) | 2020.01.03 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- data
- format
- Cast
- Heatmap
- 데이터
- covid
- Visualization
- Coding
- RStudio
- BIOINFORMATICS
- Order
- 팟빵
- Command
- geom_line
- SEQ
- coronavirus
- geom_bar
- 파이썬
- 코로나바이러스
- for loop
- hist
- 숫자
- Excel
- plot
- visualizing
- Python
- 2진수
- comma
- r
- 엑셀
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함