R Shiny with validate:仅在调整窗口大小

时间:2016-04-12 18:13:03

标签: r validation resize window shiny

我试图在Shiny中使用validate(),但每次验证命令发现错误时我都会遇到问题。我试图绘制某些东西,偶尔某些子类别的数据可能没有任何值(即如果类别是颜色,您可以选择"绿色",但有时数据集将不包含任何行类别"绿色")。

每当我验证的条件返回为假时,错误消息就会正确打印。但是,当我重新选择一个新值并更新时,新的绘图仅在我手动调整窗口大小后出现,而不是像我点击"更新"后那样出现。

colors = c("green","blue","red")
library(shiny)

ui <- fluidPage(

  tabsetPanel(
    tabPanel("Info",
             selectInput(inputId = "color",label = "color:",
                         choices = colors,
                         selected = colors[2],
                         multiple = FALSE),
             actionButton(inputId = "go",
                          label = "Update"),
             plotOutput("plot", width = "100%", height = 700,
                        brush = brushOpts(id = "plot_brush",fill = "green",clip = FALSE))

    )
  )
)

server <- function(input, output,session) {

  data = eventReactive(input$go, {
    var1 = rnorm(20,5)
    cat1 = (c(rep("red",10),rep("blue",10)))
    data = cbind.data.frame(var1,cat1)
    plotdata = data[which(data$cat1 ==isolate(input$color)),]

  }
  )

  output$plot = renderPlot({

    validate(
      need(  (isolate(input$color) %in% c("red","blue"))  , "No color of this type " )
    )

    plotdata = data()
    plot(plotdata$var1, col = isolate(input$color)) 
  })
}

shinyApp(ui = ui,server = server)

仅供参考我使用Shiny版本0.13.1,R版本3.2.3

1 个答案:

答案 0 :(得分:1)

问题是input$colorisolate语句中包含在need中。所以need仍然认为你选择了错误的颜色,因为没有人告诉它重新检查input$color。如果您将input$go添加为renderPlot的第一行(就在validate之前),我认为它可以满足您的需求。