繁体   English   中英

R Shiny 如何选择输入表单数据框列(反应式)

[英]R Shiny How to select input form data frame column (reactive)

我想从反应数据框列中 selectInput 作为下面的代码,但它没有显示任何内容:

library(shiny)
library(data.table)

ui <- fluidPage(
selectInput('region','Select region',choice=tableOutput('region'),selected=NULL)
)

server <- function(input, output, session){

data<- reactive(fread('murders.csv')) # this file contain 'region' column

output$region <- renderTable(data()$region)
}
shinyApp(ui = ui, server = server)

但是当我在服务器功能之外读取数据(非反应性)时,selectinput 工作正常:

library(shiny)
library(data.table)

ui <- fluidPage(
selectInput('region','Select region',choice=data$region,selected=NULL)
)

data<- fread('murders.csv') # this file contain 'region' column

server <- function(input, output, session){

}
shinyApp(ui = ui, server = server)

我认为最好在服务器功能中以反应模式读取文件,你能告诉我如何在反应模式下从数据列中选择输入吗?

除非您打算更改谋杀 csv 文件,否则不需要它是反应性的,它可以是一个全局值。 如果您热衷于它不是全局的,您可以在函数中转换 ui 并在其中加载数据。

版本 1

library(shiny)
library(data.table)

ui <- function(request){
  data <- fread("murders.csv")
  fluidPage(
  selectInput('region','Select region',choice=data$region,selected=NULL)
)
}

server <- function(input, output, session){
}
shinyApp(ui = ui, server = server)

如果您出于某种原因真的想将它加载到服务器中,那么您正在寻找的是updateSelectInput 见下面的版本

版本 2

library(shiny)
library(data.table)

ui <- fluidPage(
    selectInput('region','Select region',choices=NULL, selected=NULL)
  )

server <- function(input, output, session){
  data <- fread("murders.csv")
  updateSelectInput(session, "region", choices=data$region)
}
shinyApp(ui = ui, server = server)

正如我所说,它不需要是反应式的,但是如果你真的希望它是反应式的,你必须访问反应环境中的反应式,在这种情况下,observeEvent 似乎是最合适的:

版本 3

library(shiny)
library(data.table)

ui <- fluidPage(
  selectInput('region','Select region',choices=NULL, selected=NULL)
)

server <- function(input, output, session){
  data <- reactive(fread("murders.csv"))
  observeEvent(data(),updateSelectInput(session, "region", choices=data()$region))
}
shinyApp(ui = ui, server = server)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM