根据RShiny

时间:2019-01-24 19:10:10

标签: r shiny shiny-reactivity

我是RShiny和R新手。我正在尝试编写RShiny应用程序。默认情况下,它将首先使用数据集的前三个变量来绘制散点图矩阵。然后,用户可以从完整的变量列表中选择自己的变量选择。选择变量后,用户将单击并单击操作按钮,然后将使用新选择的变量重新计算图形。

我正在使用selectinput而不是checkboxinput来容纳具有许多变量的数据集。我正在使用虹膜数据集。下面的代码生成初始图,并允许用户选择变量。我只是不知道如何使它重新计算矩阵图。我该怎么做呢?谢谢!

library(shiny)
runApp(list(
  ui = fluidPage(
    cols = colnames(iris),
  headerPanel('Grow Clusters'),

  tabsetPanel(
    tabPanel("Plot",
             sidebarPanel(
              # uiOutput("varselect"),

               selectInput("choose_vars", "Select variables to plot",
                                       choices=colnames(iris), selected=iris[1:3], multiple=T),


               actionButton("submitButton", "Produce Matrix Plot!")

               ),

             mainPanel(

               plotOutput('pairsplot')
             )
    ),

    tabPanel("Summary")
    , 
    tabPanel("Table")
  )  

),
server = function(input, output) {



  selectedData <- reactive({
    cols = colnames(iris)
    selectInput("choose_vars", "Select variables to plot",
                choices=cols, selected=cols[1:3], multiple=T)
  })


  output$pairsplot <- renderPlot({
    pairs(iris[1:3], pch = 21)
    })

  output$varselect <- renderUI({
    iris[input$choose_vars]


    plotOutput("pairsplot")
  })


}

)
)

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找的是quo函数,就像Chris Beely博客中的https://chrisbeeley.net/?p=1116

如果希望用户传递参数,然后将该字符向量转换为r可以读取的对象,则需要使用quo(input$choose_vars),然后在绘图中需要在该传递变量之前添加!!。请注意,您需要加载dplyr

library(shiny)
library(dplyr)
runApp(list(
  ui = fluidPage(
    cols = colnames(iris),
    headerPanel('Grow Clusters'),

    tabsetPanel(
      tabPanel("Plot",
               sidebarPanel(
                 # uiOutput("varselect"),

                 selectInput("choose_vars", "Select variables to plot",
                             choices=colnames(iris), selected=iris[1:3], multiple=T),


                 actionButton("submitButton", "Produce Matrix Plot!")

               ),

               mainPanel(

                 plotOutput('pairsplot')
               )
      ),

      tabPanel("Summary")
      , 
      tabPanel("Table")
    )  

  ),
  server = function(input, output) {



    selectedData <- reactive({
      cols <- colnames(iris)
      selectInput("choose_vars", "Select variables to plot",
                  choices=cols, selected=cols[1:3], multiple=T)
    })


    output$pairsplot <- renderPlot({
      if(is.null(input$choose_vars) || length(input$choose_vars)<2){
        pairs(iris[1:3], pch = 21)
      } else {
        var <- quo(input$choose_vars)
        pairs(iris %>% select(!!var), pch = 21) 
      }
    })

    output$varselect <- renderUI({
      iris[input$choose_vars]


      plotOutput("pairsplot")
    })


  }

)
)