효율적인 R 코드 작성
Colin Gillespie
Jumping Rivers & Newcastle University

$$ 1, 2, 3, \ldots, n $$
1:n
seq(1, n)
seq(1, n, by = 1)
colon <- function(n) 1:n
colon(5)
1 2 3 4 5
seq_default <- function(n) seq(1, n)
seq_by <- function(n) seq(1, n, by = 1)
system.time(colon(1e8))
# user system elapsed
# 0.032 0.028 0.060
system.time(seq_default(1e8))
# user system elapsed
# 0.060 0.028 0.086
system.time(seq_by(1e8))
# user system elapsed
# 1.088 0.520 1.600
다음 코드의 문제점은
system.time(colon(1e8))
결과가 저장되지 않는다는 것입니다. 결과를 저장하려면 코드를 다시 실행해야 합니다.
res <- colon(1e8)
<- 연산자는 다음 두 가지를 모두 수행합니다:
system.time(res <- colon(1e8))
= 연산자는 다음 중 하나만 수행합니다:
# Raises an error
system.time(res = colon(1e8))
| 방법 | 절대 시간(초) | 상대 시간 |
|---|---|---|
colon(n) |
0.060 | $0.060/0.060 = 1.00$ |
seq_default(n) |
0.086 | $0.086/0.060 = 1.40$ |
seq_by(n) |
1.607 | $1.60/0.060 = 26.7$ |
library("microbenchmark")n <- 1e8 microbenchmark(colon(n), seq_default(n), seq_by(n), times = 10) # Run each function 10 times
# Unit: milliseconds
# expr min lq mean median uq max neval cld
# colon(n) 59 130 220 202 341 391 10 a
# seq_default(n) 94 204 290 337 348 383 10 a
# seq_by(n) 1945 2044 2260 2275 2359 2787 10 b
효율적인 R 코드 작성