Тидьевал ​​простой чехол - PullRequest
0 голосов
/ 02 марта 2020

Я знаю, что на tidyeval есть много ресурсов, и я прочитал некоторые из них. Но все же я не могу понять это глубоко. Точнее, почему A и B не работают одинаково:

A) Работа с select:

require(tidyverse)

var <- 'cyl'
(
  mtcars
  %>% as_tibble
  %>% select( !! var )
)

, который выдает:

# A tibble: 32 x 1
     cyl
   <dbl>
 1     6
 2     6
 3     4
 4     6
 5     8
 6     6
 7     8
 8     4
 9     4
10     6
# … with 22 more rows

B) Не работает с фильтр

(
  mtcars
  %>% as_tibble
  %>% filter( !! var == "6")
)

, который производит:

# A tibble: 0 x 11
# … with 11 variables: mpg <dbl>, cyl <dbl>, disp <dbl>, hp <dbl>, drat <dbl>, wt <dbl>, qsec <dbl>, vs <dbl>,
#   am <dbl>, gear <dbl>, carb <dbl>

B ') Решено rlang::sym:

Я решил это с помощью этого SO ответа .

(
  mtcars
  %>% as_tibble
  %>% filter( !! rlang::sym(var) == "6")
)


, который выдает ожидаемый результат.

# A tibble: 7 x 11
    mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1  21       6  160    110  3.9   2.62  16.5     0     1     4     4
2  21       6  160    110  3.9   2.88  17.0     0     1     4     4
3  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
4  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
5  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
6  17.8     6  168.   123  3.92  3.44  18.9     1     0     4     4
7  19.7     6  145    175  3.62  2.77  15.5     0     1     5     6

Хорошо, я все заработал, но, пожалуйста, объясните мне разницу между A и B.


PS: Если вы хотите прочитать о моем стиле magritt pipe chain, проверьте ссылку .

...