Я изо всех сил пытаюсь понять это.
Ниже показано, как мне отфильтровать мой data.frame "аккуратно" и нарисовать график с использованием plotly.В этом случае я использую API на основе формул plotly, чтобы указать, какие столбцы фрейма данных использовать:
library(plotly)
tidy_filter = function(data, x) {
x = enquo(x)
filter(data, !!x > 5)
}
mtcars %>%
tidy_filter(wt) %>%
plot_ly(x = ~wt, y = ~wt)
Я могу обернуть это в одну функцию, чтобы получить тот же результат:
tidy_ply = function(data, x) {
x = enquo(x)
data = filter(data, !!x > 5)
plot_ly(data, x = x, y = x)
}
tidy_ply(mtcars, wt)
Теперь:
Я предполагаю, что enquo(x)
в этом случае, по крайней мере, частично эквивалентен ~wt
, так как это, похоже, работает.Но это две разные вещи (формула Quosure VS).Какая связь между ними и почему работает выше?
Преимущество API формул plotly состоит в том, что если я хочу манипулировать входным значением, я могу делать что-то вроде ~wt/2
.Но в приведенном выше примере plot_ly(data, x = x, y = x/2)
выдает ошибку.Есть ли способ сделать эту работу?
Я предполагаю, что общий вопрос заключается в том, как наилучшим образом объединить подход аккуратного вычисления с подходом на основе формул сюжета?