코드 벡터화의 중요성

효율적인 R 코드 작성

Colin Gillespie

Jumping Rivers & Newcastle University

일반 규칙

  • R 함수를 호출하면 결국 C 또는 FORTRAN 코드가 실행됩니다
    • 해당 코드는 _매우_ 고도로 최적화되어 있습니다

목표

  • 기반 C 또는 FORTRAN 코드에 최대한 빠르게 접근하기; 함수 호출이 적을수록 좋습니다.
효율적인 R 코드 작성

벡터화 함수

  • 많은 R 함수가 벡터화되어 있습니다
    • 단일 숫자를 입력하지만 벡터를 반환
rnorm(4)
-0.7247  0.2502  0.3510  0.6919
  • 벡터를 입력으로 사용
mean(c(36, 48))
42
효율적인 R 코드 작성

난수 생성

library(microbenchmark)
n <- 1e6
x <- vector("numeric", n)
microbenchmark(
    x <- rnorm(n),
    {
        for(i in seq_along(x))
            x[i] <- rnorm(1)
        },
    times = 10
)
# Unit: milliseconds
# expr        lq mean    uq  cld
# rnorm(n)    60   70    80  a
# Looping   2600 2700  2800   b

## Output trimmed for presentation

비교

x <- vector("numeric", n)
for(i in seq_along(x))
    x[i] <- rnorm(1)

vs

x <- rnorm(n)
효율적인 R 코드 작성

루프가 느린 이유

루프 방식
x <- vector("numeric", n)
for(i in seq_along(x))
    x[i] <- rnorm(1)
할당
x <- vector("numeric", n)
  • _루프_: 일회성 비용
  • 벡터화: 유사한 수준
생성
  • _루프_: rnorm() 백만 번 호출
  • 벡터화: rnorm() 단 한 번 호출
대입
  • _루프_: 대입 메서드 백만 번 호출
  • 벡터화: 단 한 번 대입
효율적인 R 코드 작성

R 클럽

R 클럽의 두 번째 규칙: 가능한 한 벡터화 솔루션을 사용하십시오.

효율적인 R 코드 작성

연습해 봅시다!

효율적인 R 코드 작성

Preparing Video For Download...