【问题标题】:Where is the Purrr ~ operator documented?Purrr ~ 操作符记录在哪里?
【发布时间】:2021-08-11 01:14:02
【问题描述】:

我搜索了??"~",但这只指向rlang::env_bind(大概是%<~%)和base::~。在 RStudio 中,如何找到 Purrr 的 ~ 的文档?例如,如果我忘记了如何将~ 与两个输入一起使用,我该往哪里看?

【问题讨论】:

  • 波浪号运算符不是特定于purrr,它是语言的一部分。见语言定义:cran.r-project.org/doc/manuals/r-release/R-lang.html
  • @tmfmnk "~ 波浪号,用于模型公式,可以是一元或二元"。这并没有暗示匿名函数。
  • 这个问题/答案可能有助于理解 ~(但不指向文档):stackoverflow.com/questions/44834446/…
  • 是的,在map()函数的文档中说明.f参数为a function, formula, or vector (not necessarily atomic).
  • 如果您忘记了如何将~ 与两个输入一起使用,那么您需要查看允许~ 函数的函数,而不是~ 本身。例如,purrr::pmap 显示了三种参数化方法,使用.(单个参数)、.x.y(如果只有两个)或..1..2..3 等多参数~-functions.

标签: r lambda purrr


【解决方案1】:

AdvanceR 有一个很好的解释(链接在另一个答案中给出)。在purrr cheatsheat第一页左下角也给出了简短的描述(使用示例)。

多参数与 twiddle ~ 的用法可以在 purrr 的不同函数中给出的文档中看到。例如map 请参阅参数说明,其中指出

.f 函数、公式或向量(不一定是原子的)。 如果是函数,则按原样使用。 如果是公式,例如~ .x + 2,它被转换为一个函数。引用参数的方式有以下三种: 对于单参数函数,请使用 .

对于两个参数的函数,使用 .x 和 .y

如需更多参数,请使用 ..1、..2、..3 等

此语法允许您创建非常紧凑的匿名函数。


此外,R 在其最新版本 (4.1.0) 中也有 started 类似的函数简写符号

R 现在提供了用于创建函数的简写符号,例如\(x) x + 1 被解析为函数(x) x + 1。

这种简写符号也可以在 tidyverse 之外的函数中提供有用的功能,与 twiddle 的唯一区别是这里的参数默认情况下不命名。但同样,当一个不可见的函数要在另一个函数中使用并且twiddle 表示法在这种情况下不起作用时,这种非默认命名也可能被证明是有用的。

【讨论】:

  • twiddle 与新的基本 R 匿名函数语法有很大不同。例如,twiddle 实际上并没有创建匿名函数; purrr 的函数只是将公式对象强制转换为它们可以视为函数的对象。
  • @J.Mini,是的,你是对的,我知道这一点。可能是我无法正确传达这一点。
【解决方案2】:

当您在purrr 函数的上下文中使用~ 时,它将被传递给as_mapper() 函数,而后者又从rlang 传递给as_function() 函数。这些帮助文件包含使用它所需的基本内容。这在Advanced R Book Chapter 9, Section 9.22 中有进一步的记录,其中有一些很好的例子,本章将继续这些想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-27
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 2017-05-20
    相关资源
    最近更新 更多