R 단위로 함수 실행 시간 측정
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
이를 수행하는 또 다른 방법은 Sys.time()을 사용하는 것입니다.
start.time <- Sys.time()
...Relevent codes...
end.time <- Sys.time()
time.taken <- end.time - start.time
time.taken
위의 답변과 비교했을 때, 가장 우아한 방법은 아니지만, 확실히 할 수 있는 방법입니다.
기능 내장기입니다.system.time()
할 것입니다.
다음과 같은 용도:system.time(result <- myfunction(with, arguments))
말했듯이, 앤리가말이했듯드,,system.time()
잘 작동합니다.짧은 기능을 위해서는 더 선호하는 것이 있습니다.replicate()
그 안에서:
system.time( replicate(10000, myfunction(with,arguments) ) )
microbenchmark
를 벤치마킹하기 50kB) 패키지입니다.
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
여기서 두 표현식은 평균 실행 시간이 약 25-30ns인 10000회 평가되었습니다.
실행 시간을 측정하는 더 좋은 방법은 rbenchmark 패키지를 사용하는 것입니다.이 패키지를 사용하면 테스트를 복제할 횟수와 상대 벤치마크를 지정할 수 있습니다.
stats.stackexchange의 관련 질문도 참조하십시오.
▁is도 있습니다.proc.time()
다음과 같은 방법으로 사용할 수 있습니다.Sys.time
에게 하만그당유결줍과니를다사한게신과 .system.time
.
ptm <- proc.time()
#your function here
proc.time() - ptm
사용하는 것 사이의 주요 차이점
system.time({ #your function here })
은 게그바로입니다.proc.time()
메소드는 단지 시간을 측정하는 대신 여전히 당신의 기능을 실행합니다...그리고 그건 그렇고, 나는 사용하는 것을 좋아합니다.system.time
와 함께{}
안에 물건들을 넣을 수 있도록...
패키지 "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
다른 솔루션은 단일 기능에 유용하지만 보다 일반적이고 효과적인 다음 코드를 권장합니다.
Rprof(tf <- "log.log", memory.profiling = TRUE)
# the code you want to profile must be in between
Rprof (NULL) ; print(summaryRprof(tf))
또 입니다.profvis
코드 실행 시간만 측정하는 것이 아니라 실행하는 각 기능에 대한 드릴다운 기능을 제공합니다.Shiny에게도 사용할 수 있습니다.
library(profvis)
profvis({
#your code here
})
몇 가지 예를 보려면 여기를 클릭하십시오.
스타일의 MATLAB을 할 수 .tic
-toc
원하는 경우 함수를 선택합니다. SO » SO »
사용할 수 있습니다.Sys.time()
파일에 때 "csv"라고 말할 .end - start
대신 다음 단위를 정의해야 합니다.
f_name <- function (args*){
start <- Sys.time()
""" You codes here """
end <- Sys.time()
total_time <- as.numeric (end - start, units = "mins") # or secs ...
}
그러면 사용할 수 있습니다.total_time
적절한 형식을 가지고 있습니다.
위의 모든 답변에서 저는 이러한 단순화된 틱톡 기능을 사용하기 위해 올라왔습니다.
tic <- function(){ start.time <<- Sys.time() }
toc <- function(){ round(Sys.time() - start.time) }
다음 용도로 사용:
tic()
Sys.sleep(3)
toc()
다음과 같은 항목이 인쇄됩니다.
3초의 시차
bench::mark()
됩니다.bench
하나 또는 일련의 표현식을 벤치마킹하는 데 사용되므로 대안에 비해 여러 가지 이점이 있다고 생각합니다.
- 항상 각 운영 체제에 대해 사용할 수 있는 최고 정밀도 API(대개 나노초)를 사용합니다.
- 각 식에 대한 메모리 할당을 추적합니다.
- 식 반복당 R 가비지 컬렉션의 수와 유형을 추적합니다.
- 부등식 코드를 실수로 벤치마킹하지 않도록 식 결과의 동일성을 기본적으로 확인합니다.
- 가지다
bench::press()
이를 통해 대규모 가치 그리드에서 벤치마크를 쉽게 수행하고 결합할 수 있습니다.- 기본적으로 적응형 중지를 사용하며, 지정된 반복 횟수가 아닌 설정된 시간 동안 각 식을 실행합니다.
- 식은 일괄 실행되며 요약 통계는 가비지 컬렉션을 사용하여 반복을 필터링한 후 계산됩니다.이를 통해 가비지 수집의 성능과 실행 시간에 미치는 영향을 분리할 수 있습니다(자세한 내용은 Neal 2014 참조).
시간과 메모리 사용량은 표시(예: 104ns) 및 비교(예: x$mem_alloc > "10MB")를 위해 인간이 읽을 수 있는 형식을 갖는 사용자 지정 개체로 반환됩니다.
또한 사용자 정의 척도 및 형식 지정을 포함하여 ggplot2를 사용한 그림 그리기를 완전히 지원합니다.
사용:
bench::mark(log10(5))
#> # A tibble: 1 × 6
#> expression min median `itr/sec` mem_alloc `gc/sec`
#> <bch:expr> <bch:tm> <bch:tm> <dbl> <bch:byt> <dbl>
#> 1 log10(5) 212ns 274ns 2334086. 0B 0
2021-08-18에 reprex 패키지에 의해 생성됨 (v2.0.1)
두 개의 차이를 취하는 것을 언급하는 몇 가지 대답이 있습니다.Sys.time()
s, 즉
start <- Sys.time()
## ... code here ... ##
end <- Sys.time()
end - start
이렇게 하면 결과가 "2초의 시차"와 같이 사람이 읽을 수 있는 형식으로 인쇄됩니다.그러나 단위가 다를 수 있기 때문에(예: "초"에서 "분"에서 "일"까지) 단위가 다를 경우 동일한 기준으로 여러 런타임을 비교하는 것이 유용하지 않습니다.
대화형이 아닌 경우 시간 단위를 지정하는 것이 좋습니다.
구체적으로.Sys.time()
를 반환합니다.POSIXct
물건.둘의 차이를 취하는 것.POSIXct
수업의 목적을 부여합니다.difftime
속성이 "sublish"인 경우.그`-`
운영은, 특히, 사용하도록 정의됩니다.difftime()
와 함께 사용할 경우POSIXct
.그것은,
time2 - time1
와 동등합니다.
difftime(time2, time1)
단위 속성을 지정하려면 다음을 추가합니다.units=
논쟁, 예를 들어.
difftime(time2, time1, units="secs")
요약하면, 사용할 수 있습니다.Sys.time()
지정된 단위(초, 분 등)로 런타임을 측정합니다.
start <- Sys.time()
## ... code here ... ##
end <- Sys.time()
difftime(end, start, units="secs")
library(rbenchmark)
sleep_func <- function() { Sys.sleep(0.5) }
benchmark(sleep_func())
아웃:
test replications elapsed relative user.self sys.self user.child sys.child
1 sleep_func() 100 50.08 1 0.02 0 NA NA
언급URL : https://stackoverflow.com/questions/6262203/measuring-function-execution-time-in-r
'programing' 카테고리의 다른 글
add_filter 대 add_action의 차이 (0) | 2023.06.11 |
---|---|
Excel 테이블 구조화된 참조를 사용하여 실행 합계를 만드는 방법은 무엇입니까? (0) | 2023.06.11 |
공유 메모리 할당 (0) | 2023.06.06 |
이러한 파일 또는 디렉터리 "제한"이 없습니다.Alpine Linux에 Pillow를 설치할 때 h" (0) | 2023.06.06 |
NodeJs용 MariaDB 커넥터 | 존재하지 않는 경우 값을 삽입하는 방법 (0) | 2023.06.06 |