假设我在 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
但是对于后者,你必须命名
b
和 d
f()
中的参数以免想离开时出错a
和 c
作为它们的默认值。
关于r - 如何有效地部分应用 R 中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32173901/