作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我真的找遍了所有地方,但没有找到我的问题的答案:
一般化问题:
formals()
)?我的问题:
我想获得 R 中任何函数的参数的计算时间。例如,让我们考虑一个函数:
foo <- function(x, arg1 = 2, arg2 = arg3[1], arg3 = rnorm(10^6)) {
rnorm(10^7) # whatever time-consuming computation here
arg3^2
message("Too bad you had to launch the whole function !")
}
你会注意到困难:
x
),有些则不需要。 [结果:使用 formals()
将不会返回 x 的未计算表达式!]arg2
是用 arg3
计算的)期望的输出:
> system.time(foo(x=1))
Too bad you had to launch the whole function !
user system elapsed
1.835 0.000 1.573
> solution.function(foo, list(x=1))
The answer is in reality much lower ! It takes only 0.2 sec to compute the arguments !
最佳答案
基本上是 hack,但是复制你的函数
g = foo
用表达式替换函数体以评估每个参数,注意让错误继续存在
body(g) = quote(lapply(formals(), function(x) try(eval(x), TRUE))
或者也许
body(g) = quote(sapply(formals(), function(x) system.time(try(eval(x), TRUE))))
评估g()
(第一个版本)
> g()
$a
[1] 2
$b
[1] 16
$c
[1] 16
$d
[1] 4
$e
[1] "Error in eval(expr, envir, enclos) : object 'unknown_variable' not found\n"
attr(,"class")
[1] "try-error"
attr(,"condition")
<simpleError in eval(expr, envir, enclos): object 'unknown_variable' not found>
R 具有惰性计算,因此这不是衡量函数内部和外部时间的好方法。例如,f = function(y=Sys.sleep(Inf)) 1
立即返回而不是从不返回。
必须单独处理 ...
参数。
关于R : How evaluate formals (arguments) of function?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34808040/
我是一名优秀的程序员,十分优秀!