【问题标题】:Indexing a variable twice in R shiny在 R Shiny 中对变量进行两次索引
【发布时间】:2020-12-14 17:49:40
【问题描述】:

我正在尝试对我的 Shiny 应用程序进行一些集成测试,但我不知道我做错了什么。我怀疑这与我在尝试访问可能性、颜色和 riskMessage 变量时使用了两次“$”有关。 我一直遇到这个错误:

Error in checkEqualsNumeric(output$coloredBox$likelihoodOfHarm, 0.75) : 
  Modes: NULL, numeric
Lengths: 0, 1
target is NULL, current is numeric

这是我的 Shiny 应用程序代码,我尝试在底部测试 Shiny 应用程序。非常感谢任何帮助!

displayColoredBox<- function(color, riskMessage){
  sidebarPanel(style=sprintf("background-color: %s; width: 300px; height: 300px;", color),
               h3(sprintf("%s", riskMessage)) )  }

app <- shinyApp(
  ui = fluidPage(
    
    div(
      id = "form",
      sliderInput("count1", "First Slider Input", value=0, min=0, max=5000),
      sliderInput("count2", "Second Slider Input", value=0, min=0, max=5000),
      uiOutput("coloredBox")
    )),
  
  server <- function(input, output, session) {
    
    output$coloredBox<-renderUI({
      req(input$count1)
      req(input$count2)
      
      count1 <- input$count1;
      count2 <- input$count2;
      
      likelihood <- (count1*count2)/5000000
      
      if (likelihood>1) {
        color="red"
        riskMessage="Extreme risk!"
        
      } else if (likelihood>.65){
        color="orange"
        riskMessage="Very high risk!"
      }
      else if (likelihood>.35){
        color="yellow"
        riskMessage="High risk!"
      }
      else if (likelihood>.10){
        color="blue"
        riskMessage="Moderate risk!"
      } else {
        color="green"
        riskMessage="Low risk!"
      }
      
      coloredBox=displayColoredBox(color, riskMessage)
      
    })
  }
)

testServer(app, {
  session$setInputs(count1 = 1500)
  session$setInputs(count2 = 2500)

  checkEqualsNumeric(output$coloredBox$likelihood, 0.75)
  checkEquals(output$coloredBox$riskMessage, "Very high risk!")
  checkEquals(output$coloredBox$color, "orange")

  
})

【问题讨论】:

    标签: r shiny integration-testing shiny-server shiny-reactivity


    【解决方案1】:

    output Shiny Apps 中的对象不是您可以尝试访问的列表。相反,它们是 HTML 对象。闪亮的方式如下:将您的值存储为根据输入变化的反应式。检查反应物是否具有所需的值。

    displayColoredBox<- function(color, riskMessage){
      sidebarPanel(style=sprintf("background-color: %s; width: 300px; height: 300px;", color),
                   h3(sprintf("%s", riskMessage)) )  }
    
    library(RUnit)
    app <- shinyApp(
      ui = fluidPage(
        
        div(
          id = "form",
          sliderInput("count1", "First Slider Input", value=0, min=0, max=5000),
          sliderInput("count2", "Second Slider Input", value=0, min=0, max=5000),
          uiOutput("coloredBox")
        )),
      
      server <- function(input, output, session) {
        
        likelihood <- reactive((input$count1*input$count2)/5000000)
        boxValues <- reactiveValues(color="", riskMessage="")
        
        observe({
          req(input$count1)
          req(input$count2)
          if (likelihood()>1) {
            boxValues$color="red"
            boxValues$riskMessage="Extreme risk!"
            
          } else if (likelihood()>.65){
            boxValues$color="orange"
            boxValues$riskMessage="Very high risk!"
          }
          else if (likelihood()>.35){
            boxValues$color="yellow"
            boxValues$riskMessage="High risk!"
          }
          else if (likelihood()>.10){
            boxValues$color="blue"
            boxValues$riskMessage="Moderate risk!"
          } else {
            boxValues$color="green"
            boxValues$riskMessage="Low risk!"
          }
        })
        
        
        output$coloredBox<-renderUI({
          displayColoredBox(boxValues$color, boxValues$riskMessage)
        })
      }
    )
    
    
    testServer(app, {
      session$setInputs(count1 = 1500)
      session$setInputs(count2 = 2500)
      
      checkEquals(likelihood(), 0.75)
      checkEquals(boxValues$riskMessage, "Very high risk!")
      checkEquals(boxValues$color, "orange")
      
      
    })
    

    【讨论】:

    • 谢谢!我一直在学习集成测试,但我仍然对一些事情感到有些困惑。这种类型的测试究竟是如何工作的?有虚拟网络浏览器吗?
    猜你喜欢
    • 2016-09-25
    • 1970-01-01
    • 2021-10-13
    • 2020-12-28
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    相关资源
    最近更新 更多