我有一个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
在 verbose
中的打印表示为了 future 的输出?
最佳答案
您的职能 verbose
可以,通过添加 substitute
, 打印您传递给参数 expr
的值.
换线 print(expr)
到
print(substitute(expr))
然后
> verbose(Sys.sleep(2))
<<<<<<Sys.sleep(2)
user system elapsed
0.023 0.007 2.009
关于R: 如何让 system.time 打印被计时的表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17515193/