R中的Tilde点(〜。)

时间:2018-11-05 18:17:19

标签: r

有人可以解释R中的波浪点(〜。)吗?我已经看过一些有关它的文章。我知道代字号用于公式,指定自变量和因变量。而且,我知道该点用于指示所有其他变量。更具体地说,有人可以在此示例中解释波浪号吗?

x <- sample(10)
x %>%
  detect(~. > 5)

谢谢

1 个答案:

答案 0 :(得分:4)

正如MrFlick指出的那样,这是两个单独的运算符。它们一起提供了一种特殊的机制,该机制允许tidyverse程序包动态构建lambda functions。这在?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"

purrr::detect() calls this internally,它创建一个函数,该函数返回一个逻辑值,该逻辑值指示该函数的参数是否大于5。

正如Konrad指出的那样,该机制特定于tidyverse,并且 not 总体上不起作用。在tidyverse之外,此语法的行为在related question中进行了解释。