Я знаю, что на 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
, проверьте ссылку .