从评估函数返回 system.time

发布于 2024-12-14 02:20:06 字数 558 浏览 2 评论 0原文

R 版本 2.12,Windows XP

我正在尝试编写一个函数(如“g”),它接受一个参数、一个函数(如“f”),并返回匹配的函数。此外,“g”主体中包含一条语句,该语句告诉结果对象在调用该对象时返回 system.time 的值。举个例子就可以清楚地说明这一点。

我想要什么:

g <- function(f) {...}
z <- g(mean)
z(c(1, 4, 7))

带输出

user system elapsed
0.04   0.00    0.04

我拥有什么:

g <- function(f) {if (!exists("x")) {x <- match.fun(f)} else {system.time(x)}}
z <- g(mean)
z(c(1, 4, 7))

带输出

[1] 4

非常感谢任何帮助。

R version 2.12, Windows XP

I am attempting to write a function (say 'g') that takes one argument, a function (say 'f'), and returns the matched function. Furthermore, enclosed within the body of 'g' is a statement that tells the resulting object to return the value of system.time when the object is called. An example will clarify.

What I want:

g <- function(f) {...}
z <- g(mean)
z(c(1, 4, 7))

with output

user system elapsed
0.04   0.00    0.04

What I have:

g <- function(f) {if (!exists("x")) {x <- match.fun(f)} else {system.time(x)}}
z <- g(mean)
z(c(1, 4, 7))

with output

[1] 4

Any help is greatly appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鸵鸟症 2024-12-21 02:20:06

也许这会有所帮助:

g <- function(f){
  function(x){
    zz <- system.time(
        xx <- match.fun(f)(x)
    )
    list(value=xx, system.time=zz)
  }
}

使用中:

g(mean)(c(1, 4, 7))

$value
[1] 4

$system.time
   user  system elapsed 
      0       0       0 

您可能需要考虑如何返回值。我使用了一个列表,但另一个选择是打印系统时间作为副作用并返回计算值。

Maybe this will help:

g <- function(f){
  function(x){
    zz <- system.time(
        xx <- match.fun(f)(x)
    )
    list(value=xx, system.time=zz)
  }
}

In use:

g(mean)(c(1, 4, 7))

$value
[1] 4

$system.time
   user  system elapsed 
      0       0       0 

You may want to think about how your return the values. I used a list, but another option is to print the system time as a side effect and return the calculated value.

醉殇 2024-12-21 02:20:06

最近我为自己做了类似的功能:

with_times <- function(f) {
    f <- match.fun(f)
    function(...) {
        .times <- system.time(res <- f(...))
        attr(res, "system.time") <- as.list(na.omit(.times))
        res
    }
}

例如:

g <- function(x,y) {r<-x+y; Sys.sleep(.5); r}
g(1, 1)
# [1] 2
g2 <- with_times(g) 
w <- g2(1, 1)

可以通过两种方式提取计时:

attributes(w)$system.time
# $user.self
# [1] 0
# $sys.self
# [1] 0
# $elapsed
# [1] 0.5

attr(w, "system.time")
# $user.self
# [1] 0
# $sys.self
# [1] 0
# $elapsed
# [1] 0.5

Recently I made similar function for myself:

with_times <- function(f) {
    f <- match.fun(f)
    function(...) {
        .times <- system.time(res <- f(...))
        attr(res, "system.time") <- as.list(na.omit(.times))
        res
    }
}

For example:

g <- function(x,y) {r<-x+y; Sys.sleep(.5); r}
g(1, 1)
# [1] 2
g2 <- with_times(g) 
w <- g2(1, 1)

Timings can be extracted in two ways:

attributes(w)$system.time
# $user.self
# [1] 0
# $sys.self
# [1] 0
# $elapsed
# [1] 0.5

or

attr(w, "system.time")
# $user.self
# [1] 0
# $sys.self
# [1] 0
# $elapsed
# [1] 0.5
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文