是否可以计算 R 中的算术运算次数?

Is it possible to count the number of arithmetic operations in R?

可以使用 system.time 记录用于 运行 某些代码的时间。这是一个小例子:

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

但我不仅对时间感兴趣,而且对代码中使用的算术运算(即+、-、*、/)的数量感兴趣。

在上述情况下,计算求和和除法的次数以获得平均值很容易,但我想将其应用到的代码要复杂得多。

因此,我的问题是:R中有没有统计算术运算次数的函数?

您可以跟踪感兴趣的 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 或 Fortran 代码甚至 BLAS 中进行算术运算。而且我没有计算编译代码中的调用的解决方案。如果可能的话,您需要在编译期间进行设置。