当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R purrr partial 部分应用函数,填充一些参数


部分函数应用程序允许您通过预填充一些参数来修改函数。它与泛函和其他函数运算符结合使用特别有用。

用法

partial(
  .f,
  ...,
  .env = deprecated(),
  .lazy = deprecated(),
  .first = deprecated()
)

参数

.f

一个函数。为了使输出源易于阅读,这应该是一个命名函数。

...

应部分应用 .f 的命名参数。

传递一个空的 ... = 参数来指定未来参数相对于部分化参数的位置。请参阅rlang::call_modify() 了解有关此语法的更多信息。

这些点支持准引用。如果取消引用某个值,则该值仅在函数创建时计算一次。否则,每次调用该函数时都会对其进行评估。

.env

现在通过quosures捕获环境。

.lazy

[Deprecated]请取消引用应在函数创建时评估一次的参数!!.

.first

[Deprecated]请传递一个空参数... = 指定未来参数的位置。

如上所述,该函数采用与 .f 相同的参数,但返回不同的值。

细节

partial() 创建一个采用 ... 参数的函数。与 compose() 和其他函数运算符(如 negate() )不同,它不会重用 .f 的函数签名。这是因为 partial() 明确支持在其参数上使用 substitute() 的 NSE 函数。支持这些的唯一方法是通过点来转发论点。

其他不支持的模式:

  • 无法对同一参数重复调用 partial() 以使用不同的表达式预填充它。

  • 无法在预填充参数中引用其他参数。

副词

该函数称为副词,因为它修饰函数(动词)的效果。如果您想在包中包含创建副词的函数,请务必阅读faq-adverbs-export

也可以看看

其他副词:auto_browse() , compose() , insistently() , negate() , possibly() , quietly() , safely() , slowly()

例子

# Partial is designed to replace the use of anonymous functions for
# filling in function arguments. Instead of:
compact1 <- function(x) discard(x, is.null)

# we can write:
compact2 <- partial(discard, .p = is.null)

# partial() works fine with functions that do non-standard
# evaluation
my_long_variable <- 1:10
plot2 <- partial(plot, my_long_variable)
plot2()

plot2(runif(10), type = "l")


# Note that you currently can't partialise arguments multiple times:
my_mean <- partial(mean, na.rm = TRUE)
my_mean <- partial(my_mean, na.rm = FALSE)
try(my_mean(1:10))
#> Error in mean.default(na.rm = TRUE, ...) : 
#>   formal argument "na.rm" matched by multiple actual arguments


# The evaluation of arguments normally occurs "lazily". Concretely,
# this means that arguments are repeatedly evaluated across invocations:
f <- partial(runif, n = rpois(1, 5))
f
#> <partialised>
#> function (...) 
#> runif(n = rpois(1, 5), ...)
#> <environment: 0x564146fc9140>
f()
#> [1] 0.52365044 0.83706173 0.03350404 0.04332844 0.79210294
f()
#> [1] 0.06879545 0.86444107 0.07708986

# You can unquote an argument to fix it to a particular value.
# Unquoted arguments are evaluated only once when the function is created:
f <- partial(runif, n = !!rpois(1, 5))
f
#> <partialised>
#> function (...) 
#> runif(n = 4L, ...)
#> <environment: 0x564146fc9140>
f()
#> [1] 0.9736226 0.5709573 0.7544066 0.2424543
f()
#> [1] 0.6271579 0.1684146 0.4447896 0.1646752


# By default, partialised arguments are passed before new ones:
my_list <- partial(list, 1, 2)
my_list("foo")
#> [[1]]
#> [1] 1
#> 
#> [[2]]
#> [1] 2
#> 
#> [[3]]
#> [1] "foo"
#> 

# Control the position of these arguments by passing an empty
# `... = ` argument:
my_list <- partial(list, 1, ... = , 2)
my_list("foo")
#> [[1]]
#> [1] 1
#> 
#> [[2]]
#> [1] "foo"
#> 
#> [[3]]
#> [1] 2
#> 
源代码:R/adverb-partial.R

相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Partially apply a function, filling in some arguments。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。