如何在R中模拟Lisp的let函数?

时间:2012-04-04 18:35:33

标签: r functional-programming evaluation

我试图编写let函数,允许我执行以下操作:

let(a=2, b=3, a+b)
>>> 5

目前我一直坚持

let <- function(..., expr) {
  with(list(...), quote(expr))
}

根本不起作用。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:11)

这是一种方式:

let <- function(..., expr) {
    expr <- substitute(expr)
    dots <- list(...)
    eval(expr, dots)
}

let(a = 2, b = 3, expr = a+b)
# [1] 5

编辑:或者,如果您不想命名要评估的表达式(即通过expr传递),和< / em>如果你确定它永远是最后一个参数,你可以做这样的事情。

let <- function(...) {
    args <- as.list(sys.call())[-1]
    n <- length(args)
    eval(args[[n]], args[-n])
}

let(a = 2, b = 3, a + b)
# [1] 5

答案 1 :(得分:1)

let <- function(a,b, expr=a+b){return(expr)}
let(2,3)
# [1] 5