Up count the number of times a particular function is called. This function tracker is a higher-order function or decorator that wraps around other functions to monitor and record their execution patterns, including metrics like call frequency, execution time, argument patterns, and return values. It acts as a transparent layer that doesn't modify the original function's behavior but collects valuable metadata about its usage.
Note
The usefulness of function tracking spans several critical areas:
Performance Optimization: By measuring execution times and frequency, developers can identify bottlenecks and frequently called functions that need optimization
Debugging: Tracking argument patterns and function call sequences helps pinpoint issues in complex applications
Usage Analytics: Understanding which features (functions) are most commonly used helps guide development priorities and API design decisions
Resource Management: Monitoring function behavior helps identify memory leaks, resource consumption patterns, and potential optimization opportunities
Testing: Usage patterns can inform test case design and coverage requirements, ensuring critical paths are well-tested
Documentation: Automatically gathering real-world usage examples helps maintain accurate and relevant documentation
Compliance: In regulated environments, function tracking can help maintain audit trails of system behavior
Examples
# \donttest{
library(quickcode)
# Track usage of type2 and type1 functions
store.usage.file <- tempfile()
type5 <- function(x) type2(x)
type4 <- function(x) type3(x)
type3 <- function(x) type1(x)
type1 <- function(x) {
mean(x)
sd(x)
track_func(store.usage.file)
}
type2 <- function(x) {
type1(x)
track_func(store.usage.file)
}
# add usage counts to store.usage.file
type1(number(10))
type2(number(10))
type3(number(10))
type4(number(10))
type5(number(10))
# check the store usage file
print(read.csv(store.usage.file))
#> Function Usage
#> 1 type1 5
#> 2 type2 2
# }