Как указал MrFlick, это два отдельных оператора. Вместе они предоставляют специальный механизм, который позволяет пакетам tidyverse создавать лямбда-функции на лету. Это лучше всего описано в ?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()
вызывает это внутренне , что создает функцию, которая возвращает логическое значение, указывающее, больше ли аргумент функции, чем 5.
Как указал Конрад, этот механизм специфичен для tidyverse и в целом не работает. Помимо tidyverse, поведение этого синтаксиса объясняется в связанном вопросе .