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

Posted

技术标签:

【中文标题】是否可以计算 R 中的算术运算次数?【英文标题】:Is it possible to count the number of arithmetic operations in R? 【发布时间】:2017-09-30 04:33:06 【问题描述】:

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

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

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

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

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

【问题讨论】:

在 R 级别还是在编译级别(Fortran、C/C++)? 感谢您的评论!我个人更喜欢 R 级别,因为我不熟悉 Fortran 和 C。但如果你能分享你的解决方案,也许对其他人会很好。 【参考方案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 中进行算术运算。而且我没有在编译代码中计算调用的解决方案。如果可能的话,您需要在编译期间进行设置。

【讨论】:

非常感谢您的解决方案!是否也可以将其用于线性模型?比如统计lm(mpg~disp, data = mtcars)的算术运算? 我回答的最后一段适用于lm

以上是关于是否可以计算 R 中的算术运算次数?的主要内容,如果未能解决你的问题,请参考以下文章

R因子的算术运算

Linux中的算术运算

是否可以将算术运算符传递给java中的方法?

Python3中的算术运算符

计算机中的算术运算

R语言算术运算符(Arithmetic Operators+-*/%%%/%^)R语言算术运算符(Arithmetic Operators)实战示例