如何使用用户输入从Shiny环境中获取data.frame?

时间:2018-01-31 19:24:20

标签: r shiny

您好我想弄清楚如何使用我生成的用户输入来调用R闪亮的现有表。每个用户输入选项是一个表的名称,我想使用此输入然后调用所选的表。

ui=fluidPage(
  selectInput(inputId="location",label="Please Choose location", choices=c("Dublin"="Dublin","Cork"="Cork","Galway"="Galway","Belfast"="Belfast")),
  tableOutput("table")
)
server=function(input, output){

  input=reactive(input$location)
  output$table<-renderTable(input())

} 

然而,这只是创建一个新表,其中一行包含用户输入。

1 个答案:

答案 0 :(得分:0)

您可以使用get()获取data.frame。另请注意,input不是反应变量的好名称,因为它已经定义,因此我重命名为inputx。在这种情况下,您甚至可以在没有被动反应的情况下使用output$table<-renderTable({get(input$location)})

希望这有帮助!

Dublin=Head(mtcars,5)
Cork=head(mtcars,10)
Galway=head(mtcars,15)
Belfast=head(mtcars,2)

ui=fluidPage( 
  selectInput(inputId="location",label="Please Choose location", 
              choices=c("Dublin"="Dublin","Cork"="Cork","Galway"="Galway","Belfast"="Belfast")), 
  tableOutput("table") ) 

server=function(input, output){

  inputx=reactive({get(input$location)}) 
  output$table<-renderTable(inputx())

}
shinyApp(ui,server)

最干净的解决方案可能是将数据框存储在列表中,并按如下方式从该列表中进行子集化:

Dublin=Head(mtcars,5)
Cork=head(mtcars,10)
Galway=head(mtcars,15)
Belfast=head(mtcars,2)

mylist = list(Dublin=Dublin,Cork=Cork,Galway=Galway,Belfast=Belfast)

ui=fluidPage( 
  selectInput(inputId="location",label="Please Choose location", 
              choices=c("Dublin"="Dublin","Cork"="Cork","Galway"="Galway","Belfast"="Belfast")), 
  tableOutput("table") ) 

server=function(input, output){
  output$table<-renderTable(mylist[input$location])
}
shinyApp(ui,server)