Неверный столбец с использованием dplyr + NSE

Следующий код отлично работает на моем Mac с использованием CRAN R:

delta_scores <- function(df, data_var) {
  # Use Hadley's new non-standard evaluation helpers to compute differences in 
  # the symbol passed through data_var from Session 1 to 2. Assumes an ID column
  # in df that groups units of measurement.

  # For the RHS:
  quo_data_var <- enquo(data_var)
  # For the LHS, we need yet another step (basically a string)
  name_data_var <- quo_name(quo_data_var)

  df %>% select(ID, Session, !!quo_data_var) %>% 
    # NSE spread stopped working on my windows machine!
    spread(Session, !!quo_data_var) %>% 
    # Note use of := instead of plain = to support NSE
    transmute(ID=ID, !!name_data_var := `2`-`1`)
}

test_df <- data_frame(ID=c(1,2,3,1,2,3), 
                      Session=c(1,1,1,2,2,2), 
                      Measure=c(1,2,3,1,1,4))

delta_scores(test_df, Measure)

Но когда я запускаю его в Windows, Microsoft R Open 3.4.2, dplyr 0.7.3, я получаю:

Error: Invalid column specification

ПРИМЕЧАНИЕ: это легко исправить, заменив spread на spread_('Session', name_data_var). Интересно, что вызов select работает нормально (мои настоящие фреймы данных имеют много столбцов). Меня беспокоит более серьезная проблема, заключающаяся в том, что NSE dplyr не работает в данной среде.

Просмотр трассировки стека отладчика был достаточно устрашающим, поэтому я решил сначала попросить о помощи здесь. Мы очень ценим любые идеи о том, что происходит, или идеи о том, как это отлаживать!


person Dav Clark    schedule 21.11.2017    source источник
comment
На 0.7.4 работает нормально   -  person akrun    schedule 21.11.2017
comment
Оказывается, это была проблема с tidyr (что имеет смысл - вот где определяется разброс).   -  person Dav Clark    schedule 21.11.2017


Ответы (1)


Это решено в более поздних версиях tidyr. Подтверждена работа в тидыре 0.7.2. Поддержка новой системы Hadley NSE (нестандартная оценка) была добавлена ​​в выпуск 0.7.

person Dav Clark    schedule 21.11.2017