Местоимение magrittr `.` и местоимение rlang` .data` идентичны, но как это может быть? - PullRequest
1 голос
/ 03 июля 2019

Наконец-то!TidyEval становится легче , что привело меня к проверке местоимения между местоимением magrittr . и местоимением rlang .data.

library(tidyverse)
identical(head(iris, 2) %>% mutate(col = .$Species),
          head(iris, 2) %>% mutate(col = .data$Species))
#> [1] TRUE

Посмотрите на это.Они точно одинаковы.За исключением того, что они, вероятно, нет.Из статьи выше:

.местоимение от magrittr здесь не подходит, потому что оно представляет весь фрейм данных, тогда как .data представляет подмножество для текущей группы.

В чем различия?Вы, наверное, думаете, «Просто прочитайте это предложение выше, которое вы вставили» .К сожалению, мне нужно немного больше объяснений, если вы можете предоставить это.Какие-то примеры были бы хорошими.Первое, что я подумал о попытке (код выше) показать два местоимения как «идентичные».Я чувствую противоречие здесь.Спасибо.

1 Ответ

1 голос
/ 08 июля 2019

Надеюсь, это проиллюстрирует цитату в вашем вопросе:

``` r
library(dplyr)
iris[48:52,] %>% 
  group_by(Species) %>% 
  transmute(
    Sepal.Length,
    col0 = mean(Sepal.Length),
    col1 = mean(.$Sepal.Length),
    col2 = mean(.data$Sepal.Length))
#> # A tibble: 5 x 5
#> # Groups:   Species [2]
#>   Species    Sepal.Length  col0  col1  col2
#>   <fct>             <dbl> <dbl> <dbl> <dbl>
#> 1 setosa              4.6  4.97  5.66  4.97
#> 2 setosa              5.3  4.97  5.66  4.97
#> 3 setosa              5    4.97  5.66  4.97
#> 4 versicolor          7    6.7   5.66  6.7 
#> 5 versicolor          6.4  6.7   5.66  6.7
```

Я думаю, что некоторые хотели бы использовать его для передачи аргументов в виде строк без !!sym(foo) гимнастики:

col <- "Species"
iris[48:52,] %>% 
  mutate(
    SPECIES1 = toupper(!!sym(col)),
    SPECIES2 = toupper(.data[[col]]))
#>   Sepal.Length Sepal.Width Petal.Length Petal.Width    Species   SPECIES1
#> 1          4.6         3.2          1.4         0.2     setosa     SETOSA
#> 2          5.3         3.7          1.5         0.2     setosa     SETOSA
#> 3          5.0         3.3          1.4         0.2     setosa     SETOSA
#> 4          7.0         3.2          4.7         1.4 versicolor VERSICOLOR
#> 5          6.4         3.2          4.5         1.5 versicolor VERSICOLOR
#>     SPECIES2
#> 1     SETOSA
#> 2     SETOSA
#> 3     SETOSA
#> 4 VERSICOLOR
#> 5 VERSICOLOR

Что бы это ни стоило, мне пришлось использовать .data, может быть, всего 3 раза, и когда я это делал, был, вероятно, лучший способ сделать это.Я думаю, один или два из тех, где с ggplot2.

В основном вы можете игнорировать существование .data и все равно стать очень приличным нидзя.

...