无操作函数作为stopifnot()的条件替换

时间:2012-06-07 14:16:44

标签: r function

R中是否存在无操作功能,即使参数评估成本昂贵,也会立即返回?我正在寻找条件替换stopifnot函数。

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

1 个答案:

答案 0 :(得分:9)

我认为这样做:

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,也不会看到运行时增加。