2017-03-01 54 views
0
ui <- fluidPage(
    checkboxGroupInput("data", "Select data:", 
         c("Iris" = "iris", 
         "Cars" = "mtcars")), 
    plotOutput("myPlot") 
) 

    server <- function(input, output) { 
    output$myPlot <- renderPlot({ 
     plot(Sepal.Width ~ Sepal.Length, data = input$data) 
    }) 
    } 

    shinyApp(ui, server) 

我有一個shinyApp,我希望用戶選擇一個數據集。從那裏,我想使用該數據集來製作一個簡單的情節。但是,似乎用戶輸入複選框沒有成功傳遞到server。我怎樣才能解決這個問題?R shinyapp從複選框中選擇預先存儲的數據集

+0

你的'input $ data'會返回一個字符向量''「iris」',而不是數據集'iris'。在繪圖功能中,切換到這個'data = data(input $ data)',它將加載指定的數據集 – Jean

+0

@waterling感謝您的快速響應。是的,我也注意到了。不幸的是,你的建議沒有奏效。我得到了同樣的錯誤:'無效的'envir'類型'字符'的參數 – Adrian

+0

hm ok。嘗試'get(input $ data)'。這對我行得通。 'output $ myPlot < - renderPlot({if(is.null(input $ data)){return()} plot(Sepal.Width〜Sepal.Length,data = get(input $ data)) }' – Jean

回答

0

這種閃亮的典型方式是switch(),這意味着您不需要在輸入中指定數據集,您可以在服務器中完成所有操作。在您的上下文:

library(shiny) 
ui <- fluidPage(
    checkboxGroupInput("data", "Select data:", 
        c("Iris" = "iris", 
         "Cars" = "mtcars")), 
    plotOutput("myPlot") 
) 

server <- function(input, output) { 
    dat <- reactive({ 
    switch() 
    }) 
    output$myPlot <- renderPlot({ 
    dat <- switch(input$data, 
        "iris" = iris, 
        "mtcars" = mtcars) 
    plot(Sepal.Width ~ Sepal.Length, data = get(input$data)) 
    }) 
} 

shinyApp(ui, server) 

需要注意的是,你可以在checkboxGroupInput,這使它成爲一個更靈活的工作方式使用任何字符串。

+0

謝謝。這工作完美。 – Adrian

相關問題