Rencent версии dplyr не рекомендуют версии функций с подчеркиванием, такие как filter_, в пользу аккуратная оценка.
Какая ожидается новая форма подчеркивания при новом способе? Как мне написать, избегая неопределенных символов с помощью проверки R CMD?
library(dplyr)
df <- data_frame(id = rep(c("a","b"), 3), val = 1:6)
df %>% filter_(~id == "a")
# want to avoid this, because it references column id in a variable-style
df %>% filter( id == "a" )
# option A
df %>% filter( UQ(rlang::sym("id")) == "a" )
# option B
df %>% filter( UQ(as.name("id")) == "a" )
# option C
df %>% filter( .data$id == "a" )
Есть ли предпочтительная или дополнительная форма рассмотрения? Вариант C является самым коротким, но он медленнее для некоторых из моих реальных больших наборов данных и более сложных конструкций dplyr:
microbenchmark(
sym = dsPClosest %>%
group_by(!!sym(dateVarName), !!sym("depth")) %>%
summarise(temperature = mean(!!sym("temperature"), na.rm = TRUE)
, moisture = mean(!!sym("moisture"), na.rm = TRUE)) %>%
ungroup()
,data = dsPClosest %>%
group_by(!!sym(dateVarName), .data$depth ) %>%
summarise(temperature = mean(.data$temperature , na.rm = TRUE)
, moisture = mean(.data$moisture , na.rm = TRUE)) %>%
ungroup()
,times=10
)
#Unit: milliseconds
# expr min lq mean median uq max neval
# sym 80.05512 84.97267 122.7513 94.79805 100.9679 392.1375 10
# data 4652.83104 4741.99165 5371.5448 5039.63307 5471.9261 7926.7648 10
Существует еще один ответ для mutate_, использующий еще более сложный синтаксис.
utils::globalVariables()
для регистрации всех имен переменных, которые вы используете в выражениях dplyr. - person Lionel Henry   schedule 06.12.2017