Используйте реактивные «если» заявления в R Shiny - PullRequest
0 голосов
/ 13 декабря 2018

Ниже приведены заголовки моего фрейма данных (устройства) вместе с его структурой.

      Home Season Day Timein24 countRun Run
19262    1 Autumn   1        1        8  NA
19263    1 Autumn   1        1        8  NA
19264    1 Autumn   1        1        8  NA
19265    1 Autumn   1        1        8  NA
19266    1 Autumn   1        2        8  NA
19267    1 Autumn   1        2        8  NA
19268    1 Autumn   1        2        8  NA
19293    1 Autumn   1        2        8  NA
19290    1 Autumn   1        3        8  NA
19295    1 Autumn   1        3        8  NA
19271    1 Autumn   1        3        8  NA
19294    1 Autumn   1        3        8  NA
19272    1 Autumn   1        4        8  NA
19273    1 Autumn   1        4        8  NA
19274    1 Autumn   1        4        8  NA
19275    1 Autumn   1        4        8  NA
19236    1 Autumn   1        5        8  NA
19237    1 Autumn   1        5        8  NA
19278    1 Autumn   1        5        8  NA
19279    1 Autumn   1        5        8  NA

str (устройства)

   'data.frame':    51072 obs. of  6 variables:
     $ Home    : Factor w/ 19 levels "1","2","3","5",..: 1 1 1 1 1 1 1 1 1 1 ...
     $ Season  : chr  "Autumn" "Autumn" "Autumn" "Autumn" ...
     $ Day     : Factor w/ 7 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
     $ Timein24: Factor w/ 12 levels "1","2","3","4",..: 1 1 1 1 2 2 2 2 3 3 ...
     $ countRun: num  8 8 8 8 8 8 8 8 8 8 ...
     $ Run     : num  NA NA NA NA NA NA NA NA NA NA ...

в $ Season, у меня есть четыре сезона итогда в $ countRun значения 4,8,12.Также вставил пользовательский интерфейс и сервер R Shiny, который я пробовал до сих пор.У меня проблемы с заявлением «если».Пожалуйста, смотрите:

ui = navbarPage("Flexible Demand", 
                tabPanel("Appliance1", 
                         fixedRow(column(width = 12, offset = 5, titlePanel("Appliance1"))),
                         fixedRow(column(width = 6, selectizeInput("Home", label = "Select Home",
                                                                   choices = c(sort(unique(appliance$Home))),
                                                                   selected = c(sort(unique(appliance$Home)))[1],
                                                                   multiple = F, width = "100%")),
                                  column(width = 6, selectizeInput("Season", label = "Select Season",
                                                                   choices = c(sort(unique(appliance$Season))),
                                                                   selected = c(sort(unique(appliance$Season)))[1],
                                                                   multiple = F, width = "100%"))),
                         fixedRow(column(width = 6, sliderInput("Day1C", label = "Day 1 - Hour to Run",
                                                                min = 1,max = 12, value = 2)), 
                                  column(width = 6, selectizeInput("Day1", label = "Day 1 - Duration (Hours)",
                                                                   choices = c(sort(unique(appliance$countRun))),
                                                                   selected = c(sort(unique(appliance$countRun)))[1],
                                                                   multiple = F, width = "100%")),
                                  mainPanel(DT::dataTableOutput("day1")))))

server = function(input, output, session){
  output$day1 = DT::renderDataTable({
    day1 = reactive({appliance[appliance$Home %in% input$Home &
                                  appliance$Season %in% input$Season,]})
    if (appliance$Timein24 != input$Day1C) {
      appliance$Run=0
    } else{appliance$Run=1}
    day1()
  })
}
shinyApp(ui = ui, server = server)

То, что я пытаюсь достичь этим, - это иметь значения «Запустить реактивный», основанные на том, что я выберу, в sliderInput «Day1C» и столбце «Timein24».например, если я выберу свой «День 1-Час для запуска», т.е. sliderInput «Day1C» в качестве 2, тогда Выполнение для all 2s в столбце «Timein24» кадра данных должно составлять 1, а для других -должно быть 0.

Надеюсь, у меня есть смысл.Дайте мне знать, если вы хотите получить более подробную информацию.

1 Ответ

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

Это выстрел, не полностью протестированный:

server = function(input, output, session){
  day1 = reactive({
    req(input$Home, input$Season)
    appliance[appliance$Home %in% input$Home &
              appliance$Season %in% input$Season,]
  })
  output$day1 = DT::renderDataTable({
    req(day1(), input$Day1C)
    x <- day1()
    x$Run <- ifelse(x$Timein24 == input$Day1C, 1, 0)
    x
  })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...