【问题标题】:No-op function as conditional replacement for stopifnot()无操作函数作为 stopifnot() 的条件替换
【发布时间】:2012-06-07 14:16:43
【问题描述】:

R 中是否有一个无操作函数,即使参数的评估成本很高,它也会立即返回?我正在寻找 stopifnot 函数的有条件替换。

> noop(runif(1e20))
# returns immediately and uses no memory

【问题讨论】:

    标签: r function


    【解决方案1】:

    我认为这样可以:

    noop <- function(...) invisible(NULL)
    

    因为懒惰的评估在这里拯救了:

    R> system.time(replicate(1e4, noop(runif(1e2))))
       user  system elapsed 
       0.01    0.00    0.01 
    R> system.time(replicate(1e4, noop(runif(1e5))))
       user  system elapsed 
       0.01    0.00    0.02 
    R> system.time(replicate(1e4, noop(runif(1e8))))
       user  system elapsed 
       0.01    0.00    0.01 
    R> system.time(replicate(1e4, noop(runif(1e11))))
       user  system elapsed 
       0.01    0.00    0.01 
    R> 
    

    所以即使我们增加 N,也看不到运行时间增加。

    【讨论】:

    • 谢谢。像这样的东西是否在基础或任何包中预定义?
    • 我不知道,所以只需将一行添加到您的 ~/.Rprofile 或 Rprofile.site 或 ...
    猜你喜欢
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    相关资源
    最近更新 更多