添加两个选择器输入,包括Shiny应用程序中数据框的所有列

时间:2016-12-13 18:43:00

标签: r shiny

我使用的数据库与mtcars不同,但为了让这个例子具有可重现性,我将在这里使用它。

我尝试使用滑块和两个选择器创建应用。

基本上,如果我只选择一列,我知道如何创建一个selectInput。在下面的代码中,我只需要selectInput("cylinput", "input", choices = c(all of my choices)并将cyl == input$cylinput添加到过滤器函数中。

也就是说,如果我想为数据框中的所有列创建两个selectInput,那么我就不知道如何做到这一点。好吧,我不知道如何在服务器端执行此操作。

代码在这里:

UI:

library(shiny)
library(ggplot2)
library(dplyr)

head(mtcars)

ui <- fluidPage(
  titlePanel("My App"),
  sidebarLayout(
    sidebarPanel(
      sliderInput("mpginput", "mpg", min = 10.4, max = 33.9, value = c(10.4, 33.9)),
      selectInput("xcol", "X Axis", names(mtcars)),
      selectInput("ycol", "Y Axis", names(mtcars))
    ),
    mainPanel(plotOutput("plot1"))
  )
)

服务器

server <- function(input, output){

  output$plot1 <- renderPlot({
    Filtered <- mtcars %>%
      filter(
        mpg >= input$mpginput[1],
        mpg <= input$mpginput[2]
      )
    ggplot(Filtered, aes(x = mpg, y = qsec)) +
      geom_point() 
  })
}

shinyApp(ui = ui, server = server)

我在研究时遇到了这个例子,它做了类似于我想做的事情。但是,我不熟悉基本图形或用于创建绘图的代码: http://shiny.rstudio.com/gallery/kmeans-example.html

非常感谢任何帮助。 谢谢。

1 个答案:

答案 0 :(得分:2)

我明白了。抱歉措辞不好的问题。老实说,我对Shiny很新,并且不太了解代码。

基本上,我所做的一切都是使用choices = c()而不是names(mtcars),这对我不起作用。

然后调用输入$ xcol并在ggplot2图中输入$ ycol。

<强> UI:

library(shiny)
library(ggplot2)
library(dplyr)

head(mtcars)

ui <- fluidPage(
  titlePanel("My App"),
  sidebarLayout(
    sidebarPanel(
      sliderInput("mpginput", "mpg", min = 10.4, max = 33.9, value = c(10.4, 33.9)),
      selectInput("xcol", "X Axis", choices = c("mpg","cyl","hp","drat","disp","wt","gear","carb","am","vs")),
      selectInput("ycol", "Y Axis", choices = c("mpg","cyl","hp","drat","disp","wt","gear","carb","am","vs"))
    ),
    mainPanel(plotOutput("plot1"))
  )
)

服务器

server <- function(input, output){

  output$plot1 <- renderPlot({
    Filtered <- mtcars %>% 
      filter(
        mpg >= input$mpginput[1],
        mpg <= input$mpginput[2]
      )
    ggplot(Filtered) +
      geom_point(aes_string(x = input$xcol, y = input$ycol))
  })
}

shinyApp(ui = ui, server = server)