Почему точка в base :: split (. $ Cyl)? - PullRequest
1 голос
/ 17 октября 2019

В R для науки о данных Глава 21.5.1 этот синтаксис используется в базовой функции split(.$cyl). Почему точка в .$cyl. Пакет purrr имеет синтаксис для заполнителей (. или .x), но purrr не .

library(tidyverse)
mtcars %>% split(f=.$cyl) 

1 Ответ

3 голосов
/ 17 октября 2019

Синтаксис-заполнитель, используемый purrr, также используется в канале magrittr (%>%). По умолчанию канал передает LHS (слева) в качестве первого аргумента функции в RHS (справа). В этом случае . не требуется в выражении RHS.

Например:

mtcars %>% str()

работает нормально и эквивалентно:

mtcars %>% str(.)

. в этом случае совершенно не нужен, потому что LHS (mtcars) - это первый аргумент, переданный str().

Так что это то же самое, что и:

str(mtcars)

Но в любой другой ситуации вам нужно использовать ., чтобы отметить, где в RHS должна быть передана LHS.

Ваш пример немного сложен, потому что LHS (mtcars) передается дважды в RHS (функция split()): сначала

  • в качестве первого аргумента (поэтому . не требуется)
  • , затем снова, как часть 2-го аргумента (поэтому вам нужен . в этом случае).
mtcars %>% split(f = .$cyl)

можно записать (хотя это и не нужно) как:

mtcars %>% split(x = ., f = .$cyl)

и, таким образом, фактически эквивалентно:

split(x = mtcars, f = mtcars$cyl)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...