Как оценить пустое предложение программно? - PullRequest
0 голосов
/ 12 декабря 2018

В моем наборе данных у меня есть несколько возможных группирующих переменных a, b, c.Как программно сказать dplyr не группировать по каким-либо переменным?

Например:

granularity <- NA

if(isTRUE(granularity == 'all')){
  # all group variables
  group_variables <- quos(a, b, c)

}else if(isTRUE(granularity == 'no_c')){
  # all except c
  group_variables <- quos(a, b)

}else{
  # no group variables
  group_variables <- quo()
}

data_summary <- mydata %>%
  group_by(!!! group_variables) %>%
  summarise(
    x_mean = mean(x)
  )

Это будет работать правильно, если я установлю гранулярность 'all' или 'no_c', но этоне удается, когда я присваиваю group_variables пустому предложению.Кто-нибудь знает, как заставить это работать?

Редактировать: Этот вопрос также относится к таким функциям, как select, поэтому предположим, что я хотел запустить

data_select <- mydata %>%
  select(!!! select_variables, d, e, f)

Как мне установить select_variables, чтобы иногда быть quos(a, b, c) или иногда быть пустым?

Спасибо!

1 Ответ

0 голосов
/ 12 декабря 2018

Используйте group_variables <- NULL в этом предложении:

}else{
                                    # no group variables
    group_variables <- NULL
}

также обратите внимание на массивное предупреждение:

Error in grouped_df_impl(data, unname(vars), drop) : 
  Column `<empty>` is unknown
In addition: Warning message:
Unquoting language objects with `!!!` is soft-deprecated as of rlang 0.3.0.
Please use `!!` instead.

  # Bad:
  dplyr::select(data, !!!enquo(x))

  # Good:
  dplyr::select(data, !!enquo(x))    # Unquote single quosure
  dplyr::select(data, !!!enquos(x))  # Splice list of quosures

Возможно, вы захотите не использовать пакеты с нестабильными API.

...