理解pryr包(R语言)中partial()函数的代码?

时间:2017-01-08 04:15:42

标签: r functional-programming

我知道部分功能是如何工作的。但是,当我查看partial()的源代码时,我不太明白它是如何工作的。谁能告诉我每条线的工作原理?

> partial
function (`_f`, ..., .env = parent.frame(), .lazy = TRUE) 
{
    stopifnot(is.function(`_f`))
    if (.lazy) {
        fcall <- substitute(`_f`(...))
    }
    else {
        fcall <- make_call(substitute(`_f`), .args = list(...))
    }
    fcall[[length(fcall) + 1]] <- quote(...)
    args <- list(... = quote(expr = ))
    make_function(args, fcall, .env)
}
<environment: namespace:pryr>

什么是`_f`?为什么以这种方式使用substitute()

substitute(`_f`(...))

这是什么?

quote(expr = )

为什么需要以下行?

fcall[[length(fcall) + 1]] <- quote(...)

1 个答案:

答案 0 :(得分:0)

R中的某些操作看起来不像函数调用,但它们是。例如,3 + 4也可以写成`+`(3,4)。在这种情况下,由于部分函数通过预先填充参数来工作,因此&#34;替换&#34;这里的工作原理是将环境中的任何变量替换为&#34; ...&#34;。

quote()通过捕获动作

起作用

似乎fcall行用于维护最初放入部分调用的内容