Тильда Дот в R (~.) - PullRequest
       25

Тильда Дот в R (~.)

0 голосов
/ 05 ноября 2018

Кто-нибудь может объяснить точку тильды (~.) В R? Я уже видел несколько сообщений об этом. Я знаю, что тильда используется для формул, определяя независимые и зависимые переменные. И я знаю, что точка используется для обозначения всех других переменных. Более конкретно, может ли кто-нибудь объяснить точку тильды в этом примере?

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

Спасибо

1 Ответ

0 голосов
/ 05 ноября 2018

Как указал 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, поведение этого синтаксиса объясняется в связанном вопросе .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...