簡體   English   中英

無效輸入不適用於ggvis和Shiny

[英]Reactive input not working with ggvis and Shiny

使用ggvis的Shiny應用程序的簡單示例。 嘗試使用下拉來過濾變量。 所以在這里我試圖通過mtcars的齒輪(3,4或5)進行過濾,然后為每個齒輪的唯一值繪制mp和hp的x和y。

我得到的初始繪圖選擇了默認的'3',但如果我通過下拉更改值,則沒有任何反應。 我想我知道哪里出了問題(在代碼中評論),但我已經嘗試了我能想到的一切,並且不知道我正在犯的實際錯誤是什么。

謝謝

ui.R

# ui.R

library(shiny)

shinyUI(fluidPage(
  titlePanel("Car Thing"),

  sidebarLayout(
    sidebarPanel(

        uiOutput("choose_gear")                     
    ),

    mainPanel(
       ggvisOutput("ggvis")         
    )
  )
))

server.R

#server.R

library(shiny)
library(ggvis)
library(dplyr)

gear_nos <- sort(unique(mtcars$gear))

    shinyServer(function(input, output, session) {

        output$choose_gear <- renderUI({        
            selectInput("gears", "Choose Gear", gear_nos, selected="3")                                 
        })              

        # I'm pretty sure this is where I'm messing something up
        pickedGear <- reactive({
            mtcars %>% filter(gear == input$gears)
        })

        if(is.null(dim(pickedGear))){
            pickedGear <- mtcars[mtcars$gear == 3,]
        }

        pickedGear %>% ggvis(~mpg, ~hp) %>% layer_points(fill := "green") %>% bind_shiny("ggvis")

})

我想這可能是你想要的。

請注意,我花了很shinyServer在啟動初始化shinyServer代碼時消除了一個無關的錯誤消息( incorrect string: length(0) 32 expected )的validate部分,但我現在將會記住它。

library(shiny)
library(ggvis)
library(dplyr)
# library(googleVis) # used observe instead now

u <- shinyUI(fluidPage(
  titlePanel("Car Thing"),

  sidebarLayout(
    sidebarPanel(
      uiOutput("choose_gear")                     
    ),
    mainPanel(
      ggvisOutput("ggvis")         
    )
  )
))
gear_nos <- sort(unique(mtcars$gear))

s <- shinyServer(function(input, output, session) {

  output$choose_gear <- renderUI({
      selectInput("gears", "Choose Gear", gear_nos, selected="3")
  })              

  pickedGear <- reactive({
    shiny::validate(need(input$gears, message=FALSE))
    mtcars %>% filter(gear == input$gears)
  })

  # could also replace "observe" with this from googlevis : "output$ggvis <- renderGvis({" 
  observe({
   pickedGear() %>% ggvis(~mpg,~hp) %>% layer_points(fill:="green") %>% bind_shiny("ggvis")
  })
})
shinyApp(u,s)

產量:

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM