如何在ui中使用反应函数作为输入的结果? - 闪亮
How to use the result of using reactive function as input in ui? - r shiny
我在服务器上使用了反应函数来创建数据框。
并且我想将此数据框的一列的唯一向量表示为 UI 中的 selectinput。
例如)
DATA<-data.frame(ID, NAME)
####server#####
DATAFRAME<-reactive({DATA[DATA$ID %in% input$ID,})
####UI######
selectizeInput("name",label="name:",choices=unique(DATAFRAME$NAME))
换句话说,我想显示一个预先按ID精炼过一次的数据的名称列表。
为了对反应式表达式 DATAFRAME
的变化做出反应,您可以使用 observer
并使用 updateSelectizeInput
更新名称列表(正如@MrFlick 所指出的)。
library(shiny)
ui <- fluidPage(
titlePanel("Widget Dependencies Sample App"),
selectizeInput("IdSelect", "Choose ID", "N/A"), # IDs to select from
selectizeInput("IdName", "Choose Name", "N/A"), # Names depend on selected ID
tableOutput("IdDatatable") # show the whole data set to understand what happens
)
server <- function(input, output, session) {
ID <- paste("ID", 1:3, sep = "_")
NAME <- LETTERS[1:(3*5)]
DATA <- data.frame(ID, NAME)
updateSelectizeInput(session, "IdSelect", choices = unique(ID))
DATAFRAME <- reactive({DATA[DATA$ID %in% input$IdSelect, ]})
observe({
updateSelectizeInput(session, "IdName", choices = unique(DATAFRAME()$NAME))
})
output$IdDatatable <- renderTable(DATA)
}
shinyApp(ui = ui, server = server)
但是,如果只需要一次反应式表达式 DATAFRAME
,则可以使代码更简单。在那种情况下,您不会观察到对小部件中的更改做出反应的 DATAFRAME。您可以省略 DATAFRAME
并直接观察输入小部件。该观察者生成 Names
的过滤向量,并仅用一个观察者更改 selectizeInput
中的选择。
observe({
Names <- DATA$NAME[DATA$ID %in% input$IdSelect]
updateSelectizeInput(session, "IdName", choices = unique(Names))
})
我在服务器上使用了反应函数来创建数据框。
并且我想将此数据框的一列的唯一向量表示为 UI 中的 selectinput。
例如)
DATA<-data.frame(ID, NAME)
####server#####
DATAFRAME<-reactive({DATA[DATA$ID %in% input$ID,})
####UI######
selectizeInput("name",label="name:",choices=unique(DATAFRAME$NAME))
换句话说,我想显示一个预先按ID精炼过一次的数据的名称列表。
为了对反应式表达式 DATAFRAME
的变化做出反应,您可以使用 observer
并使用 updateSelectizeInput
更新名称列表(正如@MrFlick 所指出的)。
library(shiny)
ui <- fluidPage(
titlePanel("Widget Dependencies Sample App"),
selectizeInput("IdSelect", "Choose ID", "N/A"), # IDs to select from
selectizeInput("IdName", "Choose Name", "N/A"), # Names depend on selected ID
tableOutput("IdDatatable") # show the whole data set to understand what happens
)
server <- function(input, output, session) {
ID <- paste("ID", 1:3, sep = "_")
NAME <- LETTERS[1:(3*5)]
DATA <- data.frame(ID, NAME)
updateSelectizeInput(session, "IdSelect", choices = unique(ID))
DATAFRAME <- reactive({DATA[DATA$ID %in% input$IdSelect, ]})
observe({
updateSelectizeInput(session, "IdName", choices = unique(DATAFRAME()$NAME))
})
output$IdDatatable <- renderTable(DATA)
}
shinyApp(ui = ui, server = server)
但是,如果只需要一次反应式表达式 DATAFRAME
,则可以使代码更简单。在那种情况下,您不会观察到对小部件中的更改做出反应的 DATAFRAME。您可以省略 DATAFRAME
并直接观察输入小部件。该观察者生成 Names
的过滤向量,并仅用一个观察者更改 selectizeInput
中的选择。
observe({
Names <- DATA$NAME[DATA$ID %in% input$IdSelect]
updateSelectizeInput(session, "IdName", choices = unique(Names))
})