相关疑难解决方法(0)

如何以编程方式创建R函数?

Hadley Wickham最近在r-devel邮件列表上提出了一个有趣的问题,并且无法在StackOverflow上找到关于该主题的现有问题,我认为它也可能对它有用.

换句话说:

R函数由三个元素组成:参数列表,正文和环境.我们可以从这三个元素以编程方式构造函数吗?

(在上面的r-devel链接的主题结尾处得到了一个相当全面的答案.我将让其他人重新开放各种解决方案本身的基准并提供它作为答案,但一定要引用哈德利如果你这样做的话.如果没有人在几个小时内加强,我会自己做.)

r function

40
推荐指数
3
解决办法
3342
查看次数

什么是嵌套`eval`的环境和外壳?

背景

我正在为lambdas创建一个快捷方式,因为重复使用了function (…) …我的代码.作为补救措施,我正在尝试使用其他语言(如Haskell)启发的替代语法,只要在R. Simplified中可以实现,我的代码如下所示:

f <- function (...) {
    args <- match.call(expand.dots = FALSE)$...
    last <- length(args)
    params <- c(args[-last], names(args)[[last]])

    function (...)
        eval(args[[length(args)]],
             envir = setNames(list(...), params),
             enclos = parent.frame())
}
Run Code Online (Sandbox Code Playgroud)

这允许以下代码:

f(x = x * 2)(5)       # => 10
f(x, y = x + y)(1, 2) # => 3
Run Code Online (Sandbox Code Playgroud)

等等

当然,真正的目的是将它与高阶函数1一起使用:

Map(f(x = x * 2), 1 : 10)
Run Code Online (Sandbox Code Playgroud)

问题

不幸的是,我有时必须嵌套高阶函数然后它停止工作:

f(x = Map(f(y = x + y), 1:2))(10)
Run Code Online (Sandbox Code Playgroud)

产生"错误eval(expr, …

environment eval r

5
推荐指数
1
解决办法
273
查看次数

标签 统计

r ×2

environment ×1

eval ×1

function ×1