[英]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.