Можно ли подсчитать количество арифметических операций в R?

Можно записать время, которое было использовано для запуска некоторого кода с помощью system.time. Вот небольшой пример:

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

Но меня интересуют не только время, но и количество арифметических операций (то есть +, -, *,/), которые использовались для кода.

В вышеприведенном случае было бы легко подсчитать количество суммирований и деление, чтобы получить среднее значение, но код, который я хотел бы применить к этому, намного сложнее.

Поэтому мой вопрос: есть ли функция в R, которая подсчитывает количество арифметических операций?

Ответы

Ответ 1

Вы можете проследить интересующие функции 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. И у меня нет решения для подсчета вызовов в скомпилированном коде. Вам нужно будет установить это во время компиляции, если это возможно вообще.