R에서 기능 실행 시간 측정


282

R의 기능 수행 시간을 측정하는 표준화 된 방법이 있습니까?

분명히 나는 system.time실행 전후에 그 차이를 취할 수 있지만 표준화 된 방법이나 기능이 있는지 알고 싶습니다 (바퀴를 발명하고 싶지는 않습니다).


나는 한 번 아래와 같은 것을 사용했음을 기억합니다.

somesysfunction("myfunction(with,arguments)")
> Start time : 2001-01-01 00:00:00  # output of somesysfunction
> "Result" "of" "myfunction"        # output of myfunction
> End time : 2001-01-01 00:00:10    # output of somesysfunction
> Total Execution time : 10 seconds # output of somesysfunction

2
나는 당신이 proc.time마음에 있었기 때문에 system.time당신이 필요 하다고 생각 합니다.
Marek

1
더 큰 기능을 위해 Rprof좋습니다. 코드 청크 / 함수로 모든 프로세스의 프로파일을 제공합니다.
Rich Scriven

38
google :을 통해이 질문을 찾는 새로운 R 사용자 require(microbenchmark)는 이제 (2 년 전부터) 커뮤니티 표준 방식으로 시간을 측정합니다. times <- microbenchmark( lm(y~x), glm(y~x), times=1e3); example(microbenchmark). 이것은 수행 통계 의 비교 lmglm보다는, 1000 시도를 system.time한 번만 테스트.
동 형사상

사용 res <- microbenchmark(your code1,your code2)후와 print(res)테이블을 참조하거나 ggplot2::autoplot(res)상자 그림을 볼 수 있습니다! 심판
트래비스

답변:


253

이를 수행하는 또 다른 방법은 Sys.time ()을 사용하는 것입니다.

start.time <- Sys.time()
...Relevent codes...
end.time <- Sys.time()
time.taken <- end.time - start.time
time.taken

위의 답변과 비교할 때 가장 우아한 방법은 아니지만 확실히하는 방법입니다.


14
이것은 훨씬 메모리 효율적이며 system.time ()보다 효과적으로 인수를 복사합니다. RAM에 거의 맞지 않는 데이터를 처리 할 때 중요합니다.
Adam Ryczkowski

2
를 사용하는 사람들은 Sys.time다음 사항에주의하십시오. Sys.time ()을 사용한 Timing R 코드
李哲源

1
system.time()나를 위해 더 빨랐다. 에 대한 답변을 system.time()받아 들여야한다고 생각합니다 !
김광진

이것은 여러 코어에서 병렬로 긴 계산을 수행하는 데 걸리는 시간을 아는 가장 좋은 방법입니다. 이 경우,이 호출을 통해 측정 된 벽시계 시간은 컴퓨터가 다른 것보다 계산하는 데 모든 코어가 훨씬 더 바 빠지고 계산을 완료하는 데 몇 분 또는 몇 시간이 걸리기 때문에 충분히 정확합니다. 이것은 매우 구체적인 사용 사례이지만 언급 할 가치가 있습니다.
Pablo Adames

186

내장 기능 system.time() 가이를 수행합니다.

다음과 같이 사용하십시오. system.time(result <- myfunction(with, arguments))


1
알아야 할 중요한 것은 기본적으로 system.time()인수가 gcFirst있다는 것입니다 TRUE. 이것은 측정을 좀 더 재현 가능하게하지만 전체 실행 시간의 상당한 오버 헤드를 발생시킬 수 있습니다 (물론 측정되지는 않음).
jakob-r

2
이것은 어떤 단위로 측정됩니까? 예를 들어 방금 실행 system.time(result <- myfunction(with, arguments))하여 187.564를 출력으로 얻었습니다. 초 또는 몇 초입니까?
zsad512


zsad512 @ 나는 그는 것을 합리적으로 확신 .
태퍼

58

Andrie가 말했듯 system.time()이 잘 작동합니다. 짧은 기능을 위해 나는 replicate()그것을 넣는 것을 선호 합니다.

system.time( replicate(10000, myfunction(with,arguments) ) )

28
타이밍에 복제 오버 헤드가 포함되지 않으므로 microbenchmark 패키지를 사용하는 것이 좋습니다.
hadley

37

실행 시간을 측정하는 약간 더 좋은 방법은 rbenchmark 를 사용하는 것입니다. 패키지 입니다. 이 패키지를 사용하면 테스트를 몇 번이나 복제하고 상대 벤치 마크를 수행 할 것인지 지정할 수 있습니다.

stats 에서 관련 질문도 참조하십시오.


6
Microbenchmark는 고정밀 타이밍 기능을 사용하기 때문에 훨씬 좋습니다.
hadley

4
@hadley 그러나 rbenchmark는 비교의 경우보다 사용자 친화적입니다. 나를 위해 microbenchmark는 system.time으로 업그레이드되었습니다. rmicrobenchmark는 우리에게 필요한 것입니다 :)
Marek

3
microbenchmark의 관리자는 반응이 좋았습니다. 필요한 것을 추가 할 것입니다.
hadley

34

microbenchmark 가볍고 (~ 50kB) 패키지이며 여러 표현식과 함수를 벤치마킹하기위한 R의 표준 방식입니다.

microbenchmark(myfunction(with,arguments))

예를 들면 다음과 같습니다.

> microbenchmark::microbenchmark(log10(5), log(5)/log(10), times = 10000)
Unit: nanoseconds
           expr min lq    mean median uq   max neval cld
       log10(5)   0  0 25.5738      0  1 10265 10000   a
 log(5)/log(10)   0  0 28.1838      0  1 10265 10000

여기서 두 식 모두 10000 회 평가되었으며 평균 실행 시간은 약 25-30ns입니다.


32

도 있습니다 proc.time()

같은 방식으로 Sys.time사용할 수 있지만와 비슷한 결과를 얻을 수 system.time있습니다.

ptm <- proc.time()
#your function here
proc.time() - ptm

사용의 주요 차이점

system.time({ #your function here })

proc.time()방법은 시간을 측정하는 대신 여전히 함수를 실행 한다는 것입니다 ... 그리고 내부 system.time와 함께 사용 하고 싶습니다 {}.


25

"tictoc"패키지는 실행 시간을 측정하는 매우 간단한 방법을 제공합니다. 설명서는 https://cran.fhcrc.org/web/packages/tictoc/tictoc.pdf에 있습니다.

install.packages("tictoc")
require(tictoc)
tic()
rnorm(1000,0,1)
toc()

경과 시간을 변수에 저장하려면 다음을 수행하십시오.

install.packages("tictoc")
require(tictoc)
tic()
rnorm(1000,0,1)
exectime <- toc()
exectime <- exectime$toc - exectime$tic

18

다른 솔루션이 단일 기능에 유용하지만보다 일반적이고 효과적인 다음 코드를 권장합니다.

Rprof(tf <- "log.log", memory.profiling = TRUE)
# the code you want to profile must be in between
Rprof (NULL) ; print(summaryRprof(tf))

2
나는 지금까지 Rprof에 대해 몰랐다. 그리고 그것은 정말로 위대하다! 또한 기본 R과 함께 제공되므로 microbenchmark또는 로 추가 패키지가 필요하지 않습니다 profvis.
Simon C.

예를 들어 프로파일 링하는 각 항목의 시간을 플롯하려는 경우와 같이 rprof를 시각화 할 수 있는지 궁금합니다.
Zawir Amin

@ZawirAmin Rstudio >> 프로필 메뉴를 사용하는 방법이 있습니다.
TPArrow

13

이를 수행하는 또 다른 간단하지만 매우 강력한 방법은 패키지를 사용하는 것 profvis입니다. 코드의 실행 시간을 측정 할뿐만 아니라 실행하는 각 기능에 대한 드릴 다운을 제공합니다. Shiny에도 사용할 수 있습니다.

library(profvis)

profvis({
  #your code here
})

몇 가지 예를 보려면 여기 를 클릭 하십시오 .


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.