티스토리 뷰

반응형

대부분의 프로그래밍 언어의 for 문법은 비슷하다. for 문을 알기전에 아래 R 기본함수들을 알아야 한다. 함수와 결과물을 보면 어렵지 않게 무슨 기능을 하는지는 알 수 있다.

rep(1, 10)
[1] 1 1 1 1 1 1 1 1 1 1

seq(1, 10)
[1]  1  2  3  4  5  6  7  8  9 10

seq(3, 11, 2)
[1]  3  5  7  9 11

seq_along(letters)
[1]  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

 

아래와 같이 출력해볼까 한다.

[1] 3
[1] 5 5
[1] 7 7 7
[1] 9 9 9 9
[1] 11 11 11 11 11

 

for 문을 사용해서는 아래와 같이 가능하고, 

for(i in seq(5)){
  n <- i * 2 + 1
  print(rep(n, i))
}
[1] 3
[1] 5 5
[1] 7 7 7
[1] 9 9 9 9
[1] 11 11 11 11 11
반응형

쓸데 없이 tibble & dplyr 로 해보면, 아래와 같다. 아 그리고 purrr 패키지의 map 함수를 써야 한다. 이 부분이 이해하는데 참 오랜시간이 걸렸는데 별도로 포스팅을 해볼까 싶기도 하다. 까먹기 전에...

# 중간 결과
enframe(1:5, name = NULL, value = 'c0') %>% 
  mutate(c1 = c0 * 2 + 1) %>% 
  mutate(c2 = map2(c1, c0, rep))
  
# A tibble: 5 × 3
     c0    c1 c2       
  <int> <dbl> <list>   
1     1     3 <dbl [1]>
2     2     5 <dbl [2]>
3     3     7 <dbl [3]>
4     4     9 <dbl [4]>
5     5    11 <dbl [5]>


# 최종 결과
enframe(1:5, name = NULL, value = 'c0') %>% 
  mutate(c1 = c0 * 2 + 1) %>% 
  mutate(c2 = map2(c1, c0, rep)) %>% 
  pull(c2) %>% 
  map(print) %>% 
  invisible()
[1] 3
[1] 5 5
[1] 7 7 7
[1] 9 9 9 9
[1] 11 11 11 11 11

 

또 다른 for 문 예시. seq_along 함수를 써서 for 문을 수행했다.

for(i in seq_along(letters)){
  print(rep(letters[i],i))
}

[1] "a"
[1] "b" "b"
[1] "c" "c" "c"
[1] "d" "d" "d" "d"
[1] "e" "e" "e" "e" "e"
[1] "f" "f" "f" "f" "f" "f"
[1] "g" "g" "g" "g" "g" "g" "g"
[1] "h" "h" "h" "h" "h" "h" "h" "h"
[1] "i" "i" "i" "i" "i" "i" "i" "i" "i"
 [1] "j" "j" "j" "j" "j" "j" "j" "j" "j" "j"
 [1] "k" "k" "k" "k" "k" "k" "k" "k" "k" "k" "k"
 [1] "l" "l" "l" "l" "l" "l" "l" "l" "l" "l" "l" "l"
 [1] "m" "m" "m" "m" "m" "m" "m" "m" "m" "m" "m" "m" "m"
 [1] "n" "n" "n" "n" "n" "n" "n" "n" "n" "n" "n" "n" "n" "n"
 [1] "o" "o" "o" "o" "o" "o" "o" "o" "o" "o" "o" "o" "o" "o" "o"
 [1] "p" "p" "p" "p" "p" "p" "p" "p" "p" "p" "p" "p" "p" "p" "p" "p"
 [1] "q" "q" "q" "q" "q" "q" "q" "q" "q" "q" "q" "q" "q" "q" "q" "q" "q"
 [1] "r" "r" "r" "r" "r" "r" "r" "r" "r" "r" "r" "r" "r" "r" "r" "r" "r" "r"
 [1] "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s" "s"
 [1] "t" "t" "t" "t" "t" "t" "t" "t" "t" "t" "t" "t" "t" "t" "t" "t" "t" "t" "t" "t"
 [1] "u" "u" "u" "u" "u" "u" "u" "u" "u" "u" "u" "u" "u" "u" "u" "u" "u" "u" "u" "u" "u"
 [1] "v" "v" "v" "v" "v" "v" "v" "v" "v" "v" "v" "v" "v" "v" "v" "v" "v" "v" "v" "v" "v" "v"
 [1] "w" "w" "w" "w" "w" "w" "w" "w" "w" "w" "w" "w" "w" "w" "w" "w" "w" "w" "w" "w" "w" "w" "w"
 [1] "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x"
 [1] "y" "y" "y" "y" "y" "y" "y" "y" "y" "y" "y" "y" "y" "y" "y" "y" "y" "y" "y" "y" "y" "y" "y" "y" "y"
 [1] "z" "z" "z" "z" "z" "z" "z" "z" "z" "z" "z" "z" "z" "z" "z" "z" "z" "z" "z" "z" "z" "z" "z" "z" "z" "z"

 

물론 tidyverse 패키지로 구현할 수도 있다.

enframe(letters) %>% 
  mutate(t1 = map2(value, name, rep)) %>% 
  pull(t1) %>% 
  map(print) %>% 
  invisible()

 

임의의 길이를 입력받아, 특정기호(*)로 정사각형을 출력하는 예제.

n = 5 # 임의의 길이
for(i in seq(n)){
  print(paste0(rep('*', n), collapse = ''))
}

# 출력결과
[1] “*****”
[1] “*****”
[1] “*****”
[1] “*****”
[1] “*****”
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함