使用反应函数作为ggvis输入

时间:2014-12-12 13:25:16

标签: r shiny ggvis

我有一个使用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")

1 个答案:

答案 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")
    }
  })