gpt4 book ai didi

R : How evaluate formals (arguments) of function?

转载 作者:行者123 更新时间:2023-12-02 15:22:16 25 4
gpt4 key购买 nike

我真的找遍了所有地方,但没有找到我的问题的答案:

一般化问题:

  • 如何在不启动 R 函数的情况下评估 R 函数的参数 (formals())?
  • 尽管 R 的“懒惰评估”,您如何评估 R 中的整个环境?

我的问题:

我想获得 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com