我有一个使用CSV作为输入的Shiny应用程序,并在按下按钮时加载。
shinyServer(function(input, output) {
dataInput <- reactive({
if(is.null(input$file)) {
return(NULL)
}
butt$a
})
butt <- reactiveValues()
observe({
if (input$goButton == 0) {
butt$a <- return(NULL)
}
if (input$goButton > 0) {
butt$a <- read.csv(input$file$datapath,
header = input$header,
sep = input$sep, quote = input$quote)
}
})
我想用dataInput()
作为ggvis情节的输入:
output$ggvisplot_ui <- renderUI({
if(is.null(butt$a)) {
return(NULL)
}
ggvisOutput("ggvisplot")
})
reactive({
dl <- dataInput()
dl %>%
ggvis(~mpg, ~wt) %>%
layer_points() %>%
bind_shiny("ggvisplot")
})
此处我的CSV输入是mtcars.csv,因此我使用~mpg
和~wt
作为列。如果我用reactive({ })
取出dl <- dataInput()
部分替换dl <- mtcars
,它就可以了:
output$ggvisplot_ui <- renderUI({
if(is.null(butt$a)) {
return(NULL)
}
ggvisOutput("ggvisplot")
})
dl <- mtcars
dl %>%
ggvis(~mpg, ~wt) %>%
layer_points() %>%
bind_shiny("ggvisplot")
答案 0 :(得分:4)
这有效:
output$ggvisplot_ui <- renderUI({
if(is.null(butt$a)) {
return(NULL)
}
ggvisOutput("ggvisplot")
})
observe({
if (!is.null(butt$a)) {
dl <- dataInput()
dl %>%
ggvis(~mpg, ~wt) %>%
layer_points() %>%
bind_shiny("ggvisplot")
}
})