Есть ли способ ввести строковый ввод в zoo :: rollmean () в приложении Shiny? - PullRequest
0 голосов
/ 06 августа 2020

Я впервые создаю приложение Shiny, и у меня возникла проблема с вводом и выводом с reactiv.

Я получаю данные от пользователя о состоянии, типе данных и переходе среднее значение для создания графика для данных Коронавируса.

Для работы zoo :: rollmean () мне нужно иметь имя объекта в виде прямого столбца, например rollmean (deaths, k = 3, fill = NA).

Как мне взять строковый ввод и поместить его в функцию rollmean ()? Я искал ответ какое-то время и ничего не нашел. Спасибо!

Этот код не будет работать:

ui:

selectInput(inputId = "data_point", 
  selected = "deaths", 
  label = "Type of Data,
  choices = c("Deaths" = "deaths",
              "Tests" = "people_tested",
              "Confirmed Cases" = "confirmed",
              "Recovered" = "recovered"))

сервер:

  output$covid_plot <- renderPlot({
    statedata %>%
      arrange(desc(state)) %>% 
      group_by(state) %>% 
      mutate(three_day = rollmean(input$data_point, k = 3, fill = NA),
             five_day = rollmean(input$data_point, k = 5, fill = NA),
             seven_day = rollmean(input$data_point, k = 7, fill = NA),
             fifteen_day = rollmean(input$data_point, k = 15, fill = NA))

Этот код будет:

ui:

selectInput(inputId = "data_point", 
  selected = "deaths", 
  label = "Type of Data,
  choices = c("Deaths" = "deaths",
              "Tests" = "people_tested",
              "Confirmed Cases" = "confirmed",
              "Recovered" = "recovered"))

сервер:

output$covid_plot <- renderPlot({
 statedata %>%
 arrange(desc(state)) %>% 
 group_by(state) %>% 
 mutate(three_day = rollmean(deaths, k = 3, fill = NA),
      five_day = rollmean(deaths, k = 5, fill = NA),
      seven_day = rollmean(deaths, k = 7, fill = NA),
      fifteen_day = rollmean(deaths, k = 15, fill = NA))

1 Ответ

1 голос
/ 07 августа 2020

Подделка среды, подобной shiny:

input <- list(var = "disp")

Base R

head(mtcars) %>%
  mutate(z = zoo::rollmean(get(input$var), k = 3, fill = NA))
#    mpg cyl disp  hp drat    wt  qsec vs am gear carb        z
# 1 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4       NA
# 2 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4 142.6667
# 3 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1 175.3333
# 4 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1 242.0000
# 5 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2 281.0000
# 6 18.1   6  225 105 2.76 3.460 20.22  1  0    3    1       NA

tidyeval

inp <- sym(input$var)
head(mtcars) %>%
  mutate(z = zoo::rollmean(!!inp, k = 3, fill = NA))
#    mpg cyl disp  hp drat    wt  qsec vs am gear carb        z
# 1 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4       NA
# 2 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4 142.6667
# 3 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1 175.3333
# 4 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1 242.0000
# 5 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2 281.0000
# 6 18.1   6  225 105 2.76 3.460 20.22  1  0    3    1       NA

или просто

head(mtcars) %>%
  mutate(z = zoo::rollmean(!!sym(input$var), k = 3, fill = NA))
...