是否可以计算 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 中进行算术运算。而且我没有计算编译代码中的调用的解决方案。如果可能的话,您需要在编译期间进行设置。
可以使用 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 中进行算术运算。而且我没有计算编译代码中的调用的解决方案。如果可能的话,您需要在编译期间进行设置。