2017-05-02 6 views
14

system.time을 사용하여 일부 코드를 실행하는 데 사용 된 시간을 기록 할 수 있습니다. 여기에 약간의 예는 다음과 같습니다R에서 산술 연산의 수를 계산할 수 있습니까?

system.time(
    mean(rnorm(10^6)) 
) 

하지만 (즉 +,이다 -, *, /) 시간에서뿐만 아니라 산술 연산의 수에만 관심이 아니에요 코드에 사용 된 그.

위에서 언급 한 경우 평균을 얻으려면 합계 수와 나누기를 계산하기가 쉽지만이 코드를 적용하려는 코드는 훨씬 복잡합니다.

따라서 제 질문은 : R에 산술 연산의 수를 계산하는 함수가 있습니까?

+4

R 레벨 또는 컴파일 된 레벨 (Fortran, C/C++)에서? – Roland

+0

귀하의 의견을 보내 주셔서 감사합니다! 개인적으로 Fortran과 C에 익숙하지 않기 때문에 R 레벨을 선호합니다. 그러나 솔루션을 공유 할 수 있다면 다른 사람들에게도 좋을 것입니다. – ehi

답변

25

당신은 관심의 R 기능을 추적 할 수 있습니다 :

counter <- 0 

trace("+", at = 1, print = FALSE, 
     tracer = quote(.GlobalEnv$counter <- .GlobalEnv$counter + 1)) 
#Tracing function "+" in package "base" 
#[1] "+" 

Reduce("+", 1:10) 
#[1] 55 

counter 
#[1] 9 

untrace("+") 
#Untracing function "+" in package "base" 

나는 그것이 R 레벨이 여기에 호출을 계산하는 것이 얼마나 유용 모르겠어요. 많은 (대부분?) 함수는 C 또는 포트란 코드 또는 BLAS로 산술 연산을 수행합니다. 그리고 컴파일 된 코드에서 호출을 계산하기위한 솔루션이 없습니다. 가능한 경우 컴파일하는 동안 설정해야합니다.

+0

당신의 솔루션에 대해 너무 고마워요! 선형 모델의 경우에도이를 사용할 수 있습니까? 예를 들어'lm (mpg ~ disp, data = mtcars)'의 산술 연산을 계산하려면? – ehi

+0

나의 대답의 마지막 단락은'lm'에 적용됩니다. – Roland