我有大量R
相互调用的函数,它们可能需要很长时间,所以我使用以下方法调用它们system.time
:
f1 <- function () {
print(system.time(f1.1()))
print(system.time(f1.2()))
print(system.time(f1.3()))
}
...
f <- function () {
print(system.time(f1()))
print(system.time(f2()))
print(system.time(f3()))
}
然后输出f()
看起来像
user system elapsed
129.599 (2.16min) 0.663 (663.00ms) 130.438 (2.17min)
wrote 447,337,021 bytes
user system elapsed
2746.37 (45.77min) 145.299 (2.42min) 2896.68 (48.28min)
user system elapsed
9.544 (9.54sec) 0.755 (755.00ms) 10.3 (10.30sec)
并且需要一些时间来弄清楚函数和时序之间的对应关系。
我试过这个功能:
verbose <- function (expr) {
ret <- system.time(expr)
cat("<<<<<<")
print(expr)
print(ret)
}
> verbose(Sys.sleep(2))
<<<<<<NULL
user system elapsed
0 (0.00ms) 0 (0.00ms) 2.002 (2.00sec)
唉,它打印NULL
而不是Sys.sleep(2)
(即,值而不是表达式)。
那么,如何保存expr
's 的打印表示以verbose
供将来输出?