R lazy evaluation

Advanced R Programming

以上为R高级编程的地址。

今天看到function部分有一些好玩的机制想在此记录下来。

By default, R function arguments are lazy - they're only evaluated if they're actually used:

默认情况下,R函数的参数只有在真正使用时才会执行。

但是感觉这样的理解可能有点问题~~

f <- function(x) {
  10
}
system.time(f(Sys.sleep(10)))
#>    user  system elapsed 
#>       0       0       0


force()函数

force <- function(x) x

强制执行

f <- function(x) {
  force(x)
  10
}
system.time(f(Sys.sleep(10)))
#>    user  system elapsed 
#>       0       0      10


add <- function(x) {
  function(y) x + y
}
adders <- lapply(1:10, add)
## 参数x在循环结束时的值为10
adders[[1]](10)
#> [1] 20
adders[[10]](10)
#> [1] 20


add <- function(x) {
  force(x)
  function(y) x + y
}
adders2 <- lapply(1:10, add)
adders2[[1]](10)
#> [1] 11
adders2[[10]](10)
#> [1] 20

f <- function(x = ls()) {
  a <- 1
  x
}

# ls() evaluated inside f:
f()
#> [1] "a" "x"

# ls() evaluated in global environment:
f(ls())
#>  [1] "add"      "adders"   "adders2"  "args"     "collapse" "f"       
#>  [7] "g"        "h"        "i"        "in_path"  "j"        "out_path"
#> [13] "x"        "y"


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值