反应性输入不适用于 ggvis 和 Shiny
Reactive input not working with ggvis and Shiny
使用 ggvis 的闪亮应用程序的简单示例。尝试使用下拉菜单来过滤变量。因此,我在这里尝试按 mtcars 的档位(3、4 或 5)进行过滤,然后为每个档位的唯一值绘制 mpg 和 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")
})
我想这可能就是您想要的。
请注意,我花了很长时间才弄清楚 validate
部分在 shinyServer
代码的启动初始化时消除了无关的错误消息 (incorrect string: length(0) 32 expected
),但我会我想现在记住它吧。
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)
产量:
使用 ggvis 的闪亮应用程序的简单示例。尝试使用下拉菜单来过滤变量。因此,我在这里尝试按 mtcars 的档位(3、4 或 5)进行过滤,然后为每个档位的唯一值绘制 mpg 和 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")
})
我想这可能就是您想要的。
请注意,我花了很长时间才弄清楚 validate
部分在 shinyServer
代码的启动初始化时消除了无关的错误消息 (incorrect string: length(0) 32 expected
),但我会我想现在记住它吧。
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)
产量: