是否可以计算 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语言算术运算符(Arithmetic Operators+-*/%%%/%^)R语言算术运算符(Arithmetic Operators)实战示例