dplyr передает имена столбцов как переменные с фильтром is.na - PullRequest
0 голосов
/ 30 апреля 2020

Мне известно, что аналогичные вопросы задавались, и я попробовал несколько вариантов, но у меня все еще появляется сообщение об ошибке.

df_construction <- function(selected_month, selected_variable){
  selected_variable_en <- rlang::enquo(selected_variable) #This was an attempt following the link

  #filter_criteria <- interp(!is.na(~y), .values = list(y = as.name(selected_variable))) This doesn't work

  df1 <- airquality %>%
    dplyr::filter(Month == selected_month,
                  !is.na(selected_variable_en))%>%
    select(Month, Day, !!selected_variable)

  return(df1)}


df1 <- df_construction(2, "Solar.R")

Моя конечная цель состоит в том, чтобы построить это в Shiny и, таким образом, получить входные данные для Пользователь будет выбран в качестве аргументов в функции.

Я знаю, что функции filter и select не должны обрабатываться одинаково.

Я следовал шаги в соответствии с: https://www.brodrigues.co/blog/2016-07-18-data-frame-columns-as-arguments-to-dplyr-functions/, но безуспешно из-за фильтра !is.na.

Я просто хочу иметь фрейм данных, в котором единственными столбцами являются столбец Month для выбранные месяцы, столбец Day и любой столбец из выбранного Ozone, Solar.R, Wind, Temp, который выбрал пользователь, без каких-либо NA.

Большое спасибо за помощь !!

1 Ответ

0 голосов
/ 30 апреля 2020

!! часто недостаточно для кавычек имен переменных. Вы часто нуждаетесь в них вместе с rlang::sym. И если у вас есть более одной переменной для кавычек, вам нужно использовать !!! и rlang::syms

df_construction <- function(selected_month, selected_variable){

df1 <- airquality %>%
    dplyr::filter(Month == selected_month,
                  !is.na(!!rlang::sym(selected_variable_en)))%>%
    select(Month, Day, selected_variable)

return(df1)
}

Для select вы можете напрямую указывать имена переменных. В dplyr появилась новая функциональность, заключающая в кавычки {{}}, но она работает не во всех случаях.

Если вы начнете писать имена переменных в функциях, у вас могут возникнуть проблемы с dplyr. В этом аспекте data.table проще в использовании (см. сообщение в блоге, которое я написал на эту тему )

...