Оператор If с переменной, которая будет использоваться в нескольких местах

#if-statement #shiny #reactive

#оператор if #блестящий #реактивный

Вопрос:

Я пытаюсь создать блестящую панель инструментов, где я должен использовать оператор if, чтобы определить, как следует обрабатывать переменную. в этом случае оператор if присваивает кратное (либо 1, либо 0), которое затем умножается на несколько переменных позже в коде. По какой-то причине я не могу заставить оператор IF работать вне функции renderUI. Я пытался сделать его реактивной функцией, но это тоже не сработало.

 server <- function(input, output, session) {
  LinerCost <- reactive ({ input$LLDPE_Liner/100 * DirectRM_Cost$Rs_KG[15]  
      input$Other_Additive_Liner/100 * DirectRM_Cost$Rs_KG[20]}) 

  reactive({if (input$lamination == "lam_yes") {
    lam_rm_multiple = 1} else {
      lam_rm_multiple = 0
    }}) 

  LamCost <- reactive({ LamCost * lam_rm_multiple })
  LinerCost <- reactive ({LinerCost * liner_rm_multiple})

  Weight <- reactive ({ 
    as.numeric(input$final_lam_weight) * lam_rm_multiple 
  }) 

  RMcost <- reactive({
    ((as.numeric(input$final_unlam_weight) / CombinedWeight()) * UnLamCost())
  }) 
}

shinyApp(ui, server)
 

Здесь я хочу lam_rm_multiple , чтобы ему было присвоено значение либо 0, либо 1, а затем оно умножается на переменные и принудительно присваивает им значение 0 по мере необходимости. В настоящее время я получаю сообщение об ошибке в сообщении shiny — Предупреждение: ошибка в: объект ‘lam_rm_multiple’ не найден

Комментарии:

1. Взгляните на ?eventReactive . Что-то вроде eventReactive({input$liner == «liner_yes»}, {… ваш код …}) должен это сделать.

2. Спасибо @ismirsehregal.. В итоге я заключил все переменные в as.numeric(), и это сработало для меня.