R 中的波浪号 (~.)

bg4*_*g47 2 r dplyr

谁能解释一下 R 中的波浪号 (~.)?我已经看到一些关于它的帖子。我知道波浪号用于公式,指定自变量和因变量。而且,我知道点用于表示所有其他变量。更具体地说,有人可以解释这个例子中的波浪号吗?

x <- sample(10)
x %>%
  detect(~. > 5)
Run Code Online (Sandbox Code Playgroud)

谢谢

Art*_*lov 7

正如 MrFlick 指出的,这是两个独立的运营商。它们一起提供了一种特殊的机制,允许 tidyverse 包动态构建lambda 函数。这在 中得到了最好的描述?purrr::as_mapper。具体来说,

如果是公式,例如 ~ .x + 2,则将其转换为函数。引用参数的方式有以下三种:

  • 对于单参数函数,使用 .

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

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

使用您的示例:

purrr::as_mapper( ~. > 5 )
# <lambda>
# function (..., .x = ..1, .y = ..2, . = ..1)
# . > 5
# attr(,"class")
# [1] "rlang_lambda_function"
Run Code Online (Sandbox Code Playgroud)

创建一个函数,该函数返回一个逻辑值,指示函数的参数是否大于 5。在purrr::detect() 内部生成此函数,然后使用它来遍历输入向量x。最终结果是x满足“大于 5”约束的第一个元素。

正如康拉德指出,这个机制是特定于tidyverse和做做工一般。在 tidyverse 之外,此语法的行为在相关问题中进行了解释。

  • +1。值得强调的是,此提及一般*不起作用*,它仅适用于特定函数(与匿名函数不同,匿名函数在任何地方都有效)。 (8认同)
  • 谢谢,@RLave。进行了一些改写,使其更加准确。 (3认同)