r - 如何有效地部分应用 R 中的函数?

标签 r function partial-application

假设我在 R 中有一个带有多个参数的函数,我想通过将一些参数设置为预先指定的值来将它减少为一个参数较少的函数。我试图找出在 R 中执行此操作的最佳方法是什么。

例如,假设我有一个函数

f <- function(a,b,c,d){a+b+c+d}

我想创建或找到一个可以执行以下操作的函数部分
partial <- function(f, ...){
#fill in code here
}
new_f <- partial(f, a=1, c= 2)
new_f将是 b 的函数和 d并且会返回 1+b+2+d
在python中我会做
from functools import partial

def f(a,b,c,d):
    return a+b+c+d

new_f = partial(f, a=1, c= 2)

我实际上反复这样做,所以我需要尽可能高效。谁能指出我最有效的方法来做到这一点?现在我能做的就是
partial <- function(f, ...){
    z <- list(...)
    formals(f) [names(z)] <- z
    f
}

任何人都可以让我知道更快的方法或最好的方法吗?这简直太慢了。

最佳答案

pryr里面有函数可以处理这个的包,即 partial()

f <- function(a, b, c, d) a + b + c + d 
pryr::partial(f, a = 1, c = 2)
# function (...) 
# f(a = 1, c = 2, ...)

所以你可以像这样使用它 -
new_fun <- pryr::partial(f, a = 1, c = 2)
new_fun(b = 2, d = 5)
# [1] 10
## or if you are daring ...
new_fun(2, 5)
# [1] 10

您也可以简单地更改 f()的形式论据
f <- function(a, b, c, d) a + b + c + d 
formals(f)[c("a", "c")] <- list(1, 2)
f
# function (a = 1, b, c = 2, d) 
# a + b + c + d
f(b = 2, d = 5)
# [1] 10

但是对于后者,你必须命名 bd f() 中的参数以免想离开时出错ac作为它们的默认值。

关于r - 如何有效地部分应用 R 中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32173901/

相关文章:

c# - 委托(delegate) func<in T, TResult> 无法访问属性

php - 多个 php 类(Symfony Controller )可访问的函数

haskell - 任何人都知道如何使用部分应用的三参数函数中缀(haskell)

R:基于行过滤器创建多个数据框

r - 从 `cowplot` 中的组合图中提取单个图的详细信息以进行单元测试

java - read.xlsx() 在 R 中抛出错误

Excel函数: "Not Isblank" with "Or" and if date is

Python 参数绑定(bind)器

haskell - 数据构造函数的部分应用

r - 与 reshape 基函数一样,在 reshape2 中使用 timevar 转换数据框?